python - 如何将 CSV 文件与 Pandas 结合(并添加识别列)

标签 python csv pandas

如何将多个 CSV 文件添加在一起并添加一个额外的列来指示每个文件的来源?

到目前为止我已经:

import os
import pandas as pd
import glob

os.chdir('C:\...')  # path to folder where all CSVs are stored
for f, i in zip(glob.glob('*.csv'), short_list):
   df = pd.read_csv(f, header = None)
   df.index = i * len(df) 
   dfs.append(df)

all_data = pd.concat(dfs, ignore_index=True)

除了识别列之外,一切都运行良好。 i 是我想要放入 all_data 的 A 列中的字符串列表。每列的每一行一个字符串。相反,它返回大量数字,并给出一个 TypeError: Index(....) 必须使用某种集合来调用

预期输出:

str1 file1entry1
str1 file1entry2
str1 file1entry3
str2 file2entry1
str2 file2entry2
str2 file2entry3

其中 short_list = ['str1', 'str2', 'str3']file1entry1, file2entry2... etc 来 self 已有的 CSV 文件.

解决方案: 我无法像建议的解决方案那样将所有内容都放在一行中,但是它为我指明了正确的方向。

for f zip(glob.glob('*csv')):
    df = pd.read_csv(f, header = None)
    df = df.assign(id = os.path.basename(f)) # simpler than pulling from the array. Adds file name to each line. 
    dfs.append(df)

all_data = pd.concat(dfs)

最佳答案

您可以使用.assign(id=i)方法,它将向每个解析的 CSV 添加 id 列,并用 i 值填充它:

df = pd.concat([pd.read_csv(f, header = None).assign(id=i)
                for f, i in zip(glob.glob('*.csv), short_list)],
               ignore_index=True)

关于python - 如何将 CSV 文件与 Pandas 结合(并添加识别列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39603567/

相关文章:

python - 将字典列表与数据框进行比较,显示缺失值

python - 对 Pandas 数据集执行 SQL 查询

python - 添加或减去 2 条插值曲线的最佳方法是什么?

c# - 如何解决 'Invalid initializer member declarator' 错误 C#,从 CSV 文件读取

mysql - 第 1 行 CSV 输入中的无效字段计数

php - 使用 php 加载和读取 csv 文件

python - 如何使用索引属性转换时间序列 Pandas 数据框?

python - 为什么python的SharedMemory似乎将数组初始化为零

python - 如何检查Python中是否存在具有给定pid的进程?

python - 标记外部节点,与networkx中的其他节点/边缘重叠最小