【问题标题】:Reading csv file with pandas用熊猫读取csv文件
【发布时间】:2018-06-03 08:13:08
【问题描述】:

enter image description here我有一个 csv 文件,其中包含 2 列文本和布尔值(y/n),我试图将所有正值放在 1 个文件中的 1 个文件中,将负值放在其他文件中。这是我尝试过的:

df = pd.read_csv('text_trait_with_binary_EXT.csv','rb',delimiter=',',quotechar='"')

#print(df)
df.columns = ["STATUS", "xEXT"]

positive = []
negative = []

for line in df:
    text = line[0].strip()

    if line[1].strip() == "y":
        positive.append(text)
    elif line[1].strip() == "n":
        negative.append(text)

print(positive)
print(negative)

当我运行它时,它只会给出一个空列表!

我是使用 pandas 的新手,所以如果你们中的任何人能提供帮助,那就太好了。

【问题讨论】:

  • 你能发布一个文件的小样本吗?这里有比迭代更好的方法。
  • 是的,因为for line in df 不会遍历行,只是遍历列名。请在此处粘贴 5-10 行已编辑为您问题中的文本的文件。
  • 我添加了截图,@thesilkworm 已经写好了解决方案!

标签: pandas csv


【解决方案1】:

正如其他人评论的那样,几乎总有比在 Pandas 中使用迭代更好的方法。它有很多内置函数来帮助避免循环。

如果我正确理解您想要从第 1 列(名为 'STATUS')中获取值的意图,请根据第 2 列(名为 'xEXT')中的对应值是 'y' 还是 @987654325 来拆分它们@,并生成两个包含第 1 列值的列表,以下应该可以工作(在您发布的前两行代码之后使用):

positive = df.loc[df['xEXT'].str.strip() == 'y', 'STATUS'].tolist()
negative = df.loc[df['xEXT'].str.strip() == 'n', 'STATUS'].tolist()

这里是loc 上文档的链接,对于此类问题很有用。

上述解决方案假设您的数据已正确读取。如果它不适合您,请按照其他人的评论执行并添加您的数据的一小部分样本,以便我们能够尝试我们提出的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2021-08-16
    相关资源
    最近更新 更多