[英]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.