[英]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_csv
和converters=
参数:
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.