我認為這個問題很基本,但我還沒有看到它在網上回答。我正在使用 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 檔案中變數的結構方式或讀取資料的代碼。感謝您提前提供的所有幫助!
uj5u.com熱心網友回復:
有多種方法可以做到這一點。每個都以不同的方式從 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)
Name其次,使用 CSV 中的值重復每一行:
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]
uj5u.com熱心網友回復:
如果你有這個資料框:
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_csvwithconverters=引數:
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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/493025.html
