我想结合使用csv,删除行而只保留某些列

时间:2018-05-21 12:08:08

标签: python pandas

这是我到目前为止的代码:

import pandas as pd

import glob, os

os.chdir("L:/FMData/")

results = pd.DataFrame([])

for counter, file in enumerate(glob.glob("F5331_FM001**")):

    namedf = pd.read_csv(file, skiprows=[1,2,3,4,5,6,7], index_col=[1], usecols=[1,2])

    results = results.append(namedf)

    results.to_csv('L:/FMData/FM001_D/FM5331_FM001_D.csv')

然而,这会按照指示生成新文档,但不会将任何数据复制到其中。我想在某个位置查找文件,名称沿着FM001,组合它们,跳过每个csv中的前7行,并且只保留新文件中的第1列和第2列。任何人都可以帮助我的代码吗?

提前致谢!!!

2 个答案:

答案 0 :(得分:0)

此代码适用于我(使用Linux和Python 3),它使用数据填充csv文件。

print之后添加read_csv以查看您的csv文件是否实际读取了任何数据,否则不会写任何内容,如下所示:

namedf = pd.read_csv(file)
print(namedf)
results = results.append(namedf)

它添加第1行(可能因为它被认为是标题)然后跳过7行然后继续,这是我的结果,因为csv文件只是从一行写到11行: F5331_FM001.csv       一个
0九 1十 2月11日

增加: 如果print(namedf)没有显示任何内容,请检查输入文件。 python程序在L:/ FMData /中查找您的文件。您确定您的文件位于该目录中吗?您可以通过使用os.chdir命令添加正确的路径来更改目录。

答案 1 :(得分:0)

要组合多个csv文件,您应该创建一个数据框列表。然后,只需一步即可通过pd.concat合并列表中的数据框。这比附加到现有数据帧更有效。

此外,您需要将结果写入for循环文件。

例如:

results = []
for counter, file in enumerate(glob.glob("F5331_FM001**")):

    namedf = pd.read_csv(file, skiprows=[1,2,3,4,5,6,7], index_col=[1], usecols=[1,2])

    results = results.append(namedf)

df = pd.concat(results, axis=0)
df.to_csv('L:/FMData/FM001_D/FM5331_FM001_D.csv')