[英]Import multiple CSV files, select 1 Column from each file & rename the column with the file name in Jupyter Noteboos
[英]Read single column from csv file and rename with the name of the text file
我正在使用 for 循環遍歷大量文本文件,select 來自文本文件的單個列(名為 ppm),以及 append 這些列到新的數據框。 我希望新數據框中的列具有文本文件的名稱,但我不確定如何執行此操作..
我的代碼是:
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)
目前,新 dataframe 中的每一列都稱為“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()'。
使用帶有 append DataFrames 的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)
假設 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)
使用df.rename()
重命名 dataframe 的列名。
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)
Output:
two.txt one.txt
0 9 3
1 0 6
與其在遍歷文件列表時連接和附加數據幀,不如考慮構建相關數據的字典,然后只構建一次 dataframe。 像這樣:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.