我正在嘗試更改 .CSV 行資料。所以對于新資料我有一個字典。我想說 python 如果我的 dict 中的鍵等于我的 .csv 中的專案行,那么更改另一行中的資料。
CSV 檔案類似于:
ID | Value_1 | Value_2 | Value_3 |
1 | info | changeme | info |
1 | info | changeme | info |
2 | info | changeme2| info |
3 | info | changeme3| info |
字典看起來像:
dictionary = {1: 'info1', 2: 'info2', 3: 'info3'}
請注意,在 .csv 檔案中,ID 可以重復,但不能在 dict 中重復(因為它是這樣作業的)。因此,當我訪問字典中的鍵并且該鍵等于.csv 檔案中的ID時, value_2行(例如)必須將其內容更改為字典中的鍵值。
我希望你們都明白我的解釋:/
然后我嘗試了這樣的事情。但我真的不知道問題出在我的編碼還是熊貓上:
for key, values in dictionary.items():
if list(str(keys)) == list(df['ID']):
df['VALUE'].replace(to_replace='VALUES', value= values, inplace= True)
但它不起作用。也在for回圈之外嘗試過,沒有if。它只是行不通。但會創建一個新行,指示類似于 .csv 檔案的 len。
也許我不必使用熊貓來做到這一點?任何建議都會有所幫助!
uj5u.com熱心網友回復:
我很確定這就是您想要的-盡管您的問題不是很清楚。
# assuming df is this
"""
ID | Value_1 | Value_2 | Value_3 |
1 | info | changeme | info |
1 | info | changeme | info |
2 | info | changeme2| info |
3 | info | changeme3| info |
"""
dictionary = {1: 'info1', 2: 'info2', 3: 'info3'}
df["ID"] = df["ID"].astype(int)
df["column_with_mapped_value"] = df["ID"].replace(to_replace=dictionary)
# output
"""
ID Value_1 Value_2 Value_3 column_with_mapped_value
0 1 info changeme info info1
1 1 info changeme info info1
2 2 info changeme2 info info2
3 3 info changeme3 info info3
"""
uj5u.com熱心網友回復:
要遍歷資料集檢查條件,我通常使用 apply 方法。在你的情況下,會是這樣的:
import pandas as pd
df = pd.read_csv('teste.csv', sep=';')
# ID Value_1 Value_2 Value_3
# 1 info changeme info
# 1 info changeme info
# 2 info changeme info
# 3 info changeme info
# 5 info changeme info
dictionary = {1: 'info1', 2: 'info2', 3: 'info3', 4: 'info4'}
df['Value_2'] = df.apply(lambda x: dictionary[x.ID] if x.ID in dictionary else x.Value_2, axis=1)
# ID Value_1 Value_2 Value_3
# 1 info info1 info
# 1 info info1 info
# 2 info info2 info
# 3 info info3 info
# 5 info changeme info
我在 csv 和 dict 中又添加了一行,以測驗如果其中一個鍵不存在會發生什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467778.html
標籤:Python python-3.x 熊猫 CSV
下一篇:如何處理錯誤不支持的運算元型別
