【问题标题】:How to write csv file to another csv file if column values equal to?如果列值等于,如何将 csv 文件写入另一个 csv 文件?
【发布时间】:2020-10-29 16:44:52
【问题描述】:

我有一个 csv 文件 pInfo.csv

id,state,rank,amount,area
74,GA,Bronze,298.62,7
263,FL,Diamond,421.43,60
33,IL,Silver,361.69,5

我正在使用 pandas 尝试仅将所有包含 Silver 等级的文件写入新文件。

类似

df = pd.read_csv("pInfo.csv")
    if df['rank'].values == "Silver":
        df.to_csv('newInfo.csv')

我收到错误“包含多个元素的数组的真值不明确。使用 a.any() 或 a.all()”

这是我第一次使用 pandas,因此感谢任何帮助或方法。

【问题讨论】:

  • 为了清楚起见,您只想将 rank == 'Silver' 的所有行复制到新的 CSV 文件中,对吗?
  • 是的,所以 Silver 输出到新文件的所有行排名都类似于 id,state,rank,amount,area 74,GA,Silver,298.62,7 263,FL,Silver,421.43,60 33,IL,Silver,361.69,5

标签: python-3.x pandas csv


【解决方案1】:

应该这样做:

df = df[df['rank'] == 'Silver']
df.to_csv('newInfo.csv', index=False)

CSV 文件:

id,state,rank,amount,area
33,IL,Silver,361.69,5

【讨论】:

  • 谢谢你正是我正在寻找的。请问为什么我们在这里使用[[]]?
  • 这是在 DataFrame 上使用过滤器的一种方法。您也可以使用 df.loc[] 代替。
  • 您可以将此标记为答案,如果有帮助,请考虑投票。
【解决方案2】:

你应该使用.loc函数:

df.loc[df['rank'] == 'Silver'].to_csv(my_filename, index=False)

对我来说很好。

您得到错误的原因是df['rank'].values == "Silver" 返回一个布尔数组。您不能将if 与这样的数组一起使用。错误中的建议是any()all(),如果数组中的any 值为True,或者如果所有 值为@,则返回True 987654329@,分别。

使用.loc[] 功能,您可以只选择满足所需条件的行(或列)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2022-01-04
    • 2021-05-27
    • 1970-01-01
    相关资源
    最近更新 更多