【问题标题】:Appending multiple CSV files and creating a new column with the filename in python在 python 中附加多个 CSV 文件并使用文件名创建一个新列
【发布时间】:2019-11-14 09:49:48
【问题描述】:

如果有办法将文件名作为列名,我正在尝试使用 pandas 库 例如,我的文件名带有日期。

stock_2019-10-11.csv,
stock_2019-11-11.csv.

我想用文件名创建 2 个不同的列并获取附加值 我希望得到一个 CSV 文件的东西:

   coulmns-primary_key, article_numerber,stock_2019-10-11,stock_2019-11-11

data-0   101,201,4,2
data-1   102,301,5,2

与上面类似,新列的值来自 CSV 的合并。

import pandas as pd
import glob
import os
import sys
import csv

data = [] # pd.concat takes a list of dataframes
for csv in globbed_files(my directiry of files):
    frame = pd.read_csv(csv,encoding='utf_16',error_bad_lines=False,index_col=False)
    frame['filename'] = os.path.basename(csv)
    data.append(frame)

frame1 = pd.concat(data, ignore_index=True

)

【问题讨论】:

  • 您正在加载的每个 csv 文件的结构是什么?
  • @Aryerez,它们有 3 列和 1000 多行。
  • @LIONELJOSEPH 我的意思是您将在问题中添加一个示例,就像您对输出所做的那样,这样我们就可以看到标题。如果文件之间的标题不同,请解释每个不同名称的逻辑。
  • @Aryerez 所有文件都有相同的列,虽然 New_PID stock New_WAWI DY-120010771 1 120010771 DY-120010796 2 120010796,但我尝试设置索引没有帮助

标签: python pandas csv dataframe


【解决方案1】:

首先将文件名作为列名添加到特定文件,然后将每个文件添加到 dataframe.write dataframe to csv (考虑到每个文件都有一列。根据您的列自定义列标题)

import pandas as pd

df=pd.DataFrame()
filenames=["C:/Users/sghungurde/Documents/server2.csv","C:/Users/sghungurde/Documents/server3.csv"]
i=0
while(i<len(filenames)):
    extracting filename from filepath 
    c1= (filenames[i].split("/")[4]).split(".")[0]
    reading csv file and assigning column name to header
    f1=pd.read_csv(filenames[i],names=[c1])
    adding file column to dataframe
    df[c1]=f1[c1]
    i+=1

print(df)
writing final df merging result to csv
df.to_csv("C:/Users/sghungurde/Documents/merge.csv",index=False)

输出

     server2       server3
 209.10.31.50  609.10.31.50
 204.12.31.53  704.12.31.53
 203.12.31.53  903.12.31.53
 102.71.99.13  102.71.99.13

【讨论】:

  • 是否可以为记录添加索引?因为我们无法将索引添加到数据框
  • 当我们将数据帧转储到 csv 时,会自动应用索引,如果我们不希望我们可以设置 index=False
  • df.to_csv("C:/Users/sghungurde/Documents/merge.csv")
猜你喜欢
  • 2019-06-07
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-23
  • 2018-06-12
  • 2020-03-28
  • 2020-03-01
相关资源
最近更新 更多