从多个csv文件中提取一个带有空行的特定列,然后合并为一个

时间:2018-08-01 23:45:49

标签: python r pandas loops csv

我的csv文件位于同一文件夹中。我只想从所有csv文件中的第5列中获取数据,并将数据写入单个文件中。但是我的csv文件中有空白行。 https://drive.google.com/file/d/1SospIppACOrLeKPU_9OknnDLnDpatIqE/view?usp=sharing

如何使用pandas.read_csv命令保持空白?

非常感谢!

2 个答案:

答案 0 :(得分:1)

假数据:

sapply(1:3, function(i) write.csv(mtcars, paste0(i,".csv"), row.names=FALSE))

会生成三个名为1.csv3.csv的csv文件,每个文件具有:

"mpg","cyl","disp","hp","drat","wt","qsec","vs","am","gear","carb"
21,6,160,110,3.9,2.62,16.46,0,1,4,4
21,6,160,110,3.9,2.875,17.02,0,1,4,4
22.8,4,108,93,3.85,2.32,18.61,1,1,4,1
21.4,6,258,110,3.08,3.215,19.44,1,0,3,1
...

代码:

write.csv(sapply(list.files(pattern="*.csv"), function(a) read.csv(a)[,5]),
          "agg.csv", row.names=FALSE)

得到一个包含

的CSV文件agg.csv
"1.csv","2.csv","3.csv"
3.9,3.9,3.9
3.9,3.9,3.9
3.85,3.85,3.85
3.08,3.08,3.08
...

答案 1 :(得分:0)

您可以使用usecols的{​​{1}}参数。

pandas.read_csv

所以我们在这里所做的是,我们遍历当前目录中所有以import pandas as pd from glob import glob 结尾的文件,然后对于每个文件,仅在感兴趣的列即第5列中读取。我们编写.csv是因为pandas使用基于0的索引,所以在0、1、2、3、4中,第五个数字是4。此外,您还要求跳过空白行,并且示例数据包含9个空白行根据实际数据,因此我们将usecols=[4]设置为9。 我们使用skiprows将所有这些连接成一个DataFrame。

pd.concat

要摆脱DataFrame中的空白行,只需使用:

combined_df = pd.concat(
                        [
                         pd.read_csv(csv_file, usecols=[4], skiprows=9) 
                         for csv_file in glob('*.csv')
                         ]
                        )

然后我们可以简单地将此combined_df = combined_df.dropna() 写入文件:

combined_df