簡體   English   中英

從 csv 文件中讀取單列並用文本文件的名稱重命名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM