簡體   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