繁体   English   中英

Python - 如何将多个变量存储在 .csv 文件的一列中,然后将这些变量读入列表

[英]Python - how to store multiple variables in one column of a .csv file and then read those variables into a list

我认为这个问题很基本,但我还没有看到它在网上回答。 我正在使用 python,并且安装了“熊猫”以使事情变得更容易。 如果有办法在没有“熊猫”的情况下做到这一点,那也太棒了! 我正在编写一个节点连接图。 我希望能够接收一些带有“上一个”和“下一个”节点列表的 .csv 文件。 我希望这些数据随后被程序读取并存储在一个列表中。 例如:

.csv 文件:

姓名 以前的 下一个
Α 一二
贝塔
查理 七八

我在我的程序中想要什么:

alpha, [one, two], [three]
beta, [four], [five]
charlie, [six], [seven, eight]

我听说过两种在一个 .csv 列中写入多个变量的方法。 一种方法是在两个值/变量之间放置一个空格: alpha,one two,three

我听说解决这个问题的另一种方法是使用 " 标记并用逗号分隔: alpha,"one,two",three

虽然我以前听说过这些答案,但我无法实现它们。 在我的程序中读取数据时,它会假设空格是字符串的一部分,或者逗号是字符串的一部分。

file = pd.read_csv("connections.csv")
previous_alpha = []
previous_alpha.append(file.previous[0])

因此,我的程序将有一个包含一个字符串的列表,而不是一个包含两个字符串[one, two]的列表,该列表看起来像["one,two"][one two]

我可以更改 .csv 文件中变量的结构方式或读取数据的代码。 感谢您提前提供的所有帮助!

如果你有这个数据框:

      Name Previous         Next
0    Alpha  one two        Three
1     Beta     four         five
2  Charlie      six  seven eight

然后您可以将字符串拆分为所需列并正常保存CSV:

df["Previous"] = df["Previous"].str.split()
df["Next"] = df["Next"].str.split()

print(df)
df.to_csv("data.csv", index=False)
      Name    Previous            Next
0    Alpha  [one, two]         [Three]
1     Beta      [four]          [five]
2  Charlie       [six]  [seven, eight]

要重新加载数据,您可以使用pd.read_csvconverters=参数:

from ast import literal_eval

df = pd.read_csv(
    "data.csv", converters={"Previous": literal_eval, "Next": literal_eval}
)
print(df)

印刷:

      Name    Previous            Next
0    Alpha  [one, two]         [Three]
1     Beta      [four]          [five]
2  Charlie       [six]  [seven, eight]

有多种方法可以做到这一点。 每个都以不同的方式从 CSV 数据开始。

第一种方法将 CSV 中的数据作为包含事物列表的单行:

Name,Previous,Next
Alpha,"One,Two",Three
Beta,Four,Five
Charlie,Six,"Seven,Eight"

注意列表周围的引用。 我们可以使用apply来更改值。 convert 函数只会使用,作为分隔符来拆分字符串。

import pandas as pd
def convert(x):
    return x.split(',')

df = pd.read_csv('file.csv')
df['Previous'] = df['Previous'].apply(convert)
df['Next'] = df['Previous'].apply(convert)

其次,使用 CSV 中的值对Name重复每一行:

Name,Previous,Next
Alpha,One,Three
Alpha,Two,Three
Beta,Four,Five
Charlie,Six,Seven
Charlie,Six,Eight

我们可以对你的agg函数进行聚合。 convert函数删除重复项并作为列表返回。

import pandas as pd
def convert(x):
    return x.drop_duplicates().to_list()

df = pd.read_csv('file.csv')
df = df.groupby('Name').agg({'Previous': convert, 'Next': convert})

结果应如下所示:

           Previous            Next
Name                               
Alpha    [One, Two]         [Three]
Beta         [Four]          [Five]
Charlie       [Six]  [Seven, Eight]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM