我正在使用 for 回圈回圈瀏覽大量文本檔案,從文本檔案中選擇一列(名為 ppm),并將這些列附加到新的資料框中。我希望新資料框中的列具有文本檔案的名稱,但我不確定如何執行此操作。
我的代碼是:
all_files=glob.glob(os.path.join(path,"*.txt"))
df1=pd.DataFrame()
for file in all_files:
file_name = os.path.basename(file)
df = pd.read_csv(file, index_col=None, sep='\s ', header = 0, usecols = ['ppm'])
df1 = pd.concat([df,df1],axis=1)
目前,新資料框中的每一列都稱為“ppm”。
我曾經有這個代碼
df1=pd.DataFrame()
for file in all_files:
file_name = file_name = os.path.basename(file)
df = pd.read_csv(file, index_col=None, sep='\s ', header = 0)
df1[file_name] = df['ppm']
但是我遇到了警告“PerformanceWarning:DataFrame 高度碎片化”。這通常是多次呼叫frame.insert的結果,性能較差。考慮使用 pd.concat(axis=1) 一次連接所有列。要獲得碎片化的框架,請在我嘗試為大量檔案(約 100 秒)運行代碼時使用 newframe = frame.copy() df1[file_name] = df['ppm'].copy()'。
uj5u.com熱心網友回復:
假設 index 相等,將所有資料添加到字典中:
all_files=glob.glob(os.path.join(path,"*.txt"))
data_dict = {}
for file in all_files:
file_name = os.path.basename(file)
df = pd.read_csv(file, index_col=None, sep='\s ', header = 0, usecols = ['ppm'])
data_dict[file_name] = df['ppm']
df1 = pd.DataFrame(data_dict)
uj5u.com熱心網友回復:
使用concat帶有附加資料幀的外部回圈以列出重命名列ppm:
all_files=glob.glob(os.path.join(path,"*.txt"))
dfs = []
for file in all_files:
file_name = os.path.basename(file)
df = pd.read_csv(file, index_col=None, sep='\s ', header = 0, usecols = ['ppm'])
dfs.append(df.rename(columns={'ppm':file_name}))
df_big = pd.concat(dfs, axis=1)
uj5u.com熱心網友回復:
使用df.rename()重命名資料框的列名。
for file in all_files:
file_name = os.path.basename(file)
print(file_name)
df = pandas.read_csv(file, index_col=None, sep=',', header = 0, usecols = ['ppm'])
df.rename(columns={'ppm': file_name}, inplace=True)
df1 = pandas.concat([df,df1],axis=1)
輸出:
two.txt one.txt
0 9 3
1 0 6
uj5u.com熱心網友回復:
與其在迭代檔案串列時連接和附加資料幀,不如考慮構建一個相關資料的字典,然后只構建一次資料幀。像這樣:
import csv
import pandas as pd
import glob
import os
PATH = ''
COL = 'ppm'
FILENAME = 'filename'
D = {COL: [], FILENAME: []}
for file in glob.glob(os.path.join(PATH, '*.csv')):
with open(file, newline='') as infile:
for row in csv.DictReader(infile):
if COL in row:
D[COL].append(row[COL])
D[FILENAME].append(file)
df = pd.DataFrame(D)
print(df)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/376301.html
