【问题标题】:Extract one specific column with blank lines from multiple csv files and merge into one [closed]从多个csv文件中提取一个带有空行的特定列并合并为一个[关闭]
【发布时间】:2019-01-09 15:20:57
【问题描述】:

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

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

非常感谢!

【问题讨论】:

  • 由于错误的原因而被搁置。不是太笼统,我认为解释很清楚。不过,这不是一个好问题,因为它没有提供示例,也没有示例代码。但这并不清楚,只是理由不足。

标签: python r pandas loops csv


【解决方案1】:

您可以使用pandas.read_csvusecols 参数。

import pandas as pd
from glob import glob

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

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

要从 DataFrame 中删除空白行,您可以简单地使用:

combined_df = combined_df.dropna()

这个combined_df 然后我们可以简单地写入文件:

combined_df.to_csv('combined_column_5.csv')

【讨论】:

  • 您好,非常感谢您的帮助。但我有一个愚蠢的问题。有一个错误说“没有要连接的对象”。是因为我应该用我的 csv 文件名替换 pd.read_csv 函数中的 csv_file 吗?谢谢!
  • 好的,我想我解决了这个问题。但是现在还有另一个错误。它说“Usecols 不匹配列,列预期但未找到”。你介意告诉我如何解决吗?
  • 您必须将 column_of_interest 的名称更改为 csv 中该列的名称,但让我进行编辑以使这变得不必要
  • 好了,现在再看看吧!
  • 感谢您的解释。非常清楚。该代码适用于我的其他 csv 文件。但这是我的错。我不是很清楚。我有一个这样的文件,里面有空行。 drive.google.com/drive/folders/…。我只想要第 5 列,同时保留所有空白。你介意看看并给我一些提示吗?非常感谢!
【解决方案2】:

假数据:

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

生成三个 csv 文件,分别命名为 1.csv3.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
...

【讨论】:

    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    相关资源
    最近更新 更多