使用 Pandas,我試圖使用密鑰提取價值,但我一直未能這樣做。你能幫我解決這個問題嗎?
有一個像下面這樣的 csv 檔案:
value
"{""id"":""1234"",""currency"":""USD""}"
"{""id"":""5678"",""currency"":""EUR""}"
我在 Pandas 中匯入了這個檔案,并從中制作了一個 DataFrame:
來自 csv 檔案的資料框
但是,當我嘗試使用鍵(例如 df["id"])提取值時,我遇到了錯誤訊息。
我想使用 df["id"] 查看值 1234 或 5678。我應該采取哪個步驟來完成它?這可能是一個非常基本的問題,但我需要你的幫助。謝謝。
uj5u.com熱心網友回復:
未正確讀取 csv 檔案。
你沒有設定分隔符;pandas 可以自動檢測分隔符,但在您的情況下沒有這樣做。有關更多資訊,請參閱read_csv檔案。因為 ,pandas 資料框有一個單列value,它將檔案中的整行作為單個單元格 - 第一個條目是"{""id"":""1234"",""currency"":""USD""}". 因此,該檔案沒有 column id,并且您無法按 id 選擇資料。
資料未格式化為帶有行標題和資料列的 Pandas df。讀入此資料的一種選擇是手動處理每一行,盡管可能有更靈活的選項。
file = 'test.dat'
f = open(file,'r')
id_vals = []
currency = []
for line in f.readlines()[1:]:
## remove obfuscating characters
for c in '"{}\n':
line = line.replace(c,'')
line = line.split(',')
## extract values to two lists
id_vals.append(line[0][3:])
currency.append(line[1][9:])
uj5u.com熱心網友回復:
您只需要稍微清理一下 CSV 檔案就可以了。這是每一步:
# open your csv and read as a text string
with open('My_CSV.csv', 'r') as f:
my_csv_text = f.read()
# remove problematic strings
find_str = ['{', '}', '"', 'id:', 'currency:','value']
replace_str = ''
for i in find_str:
my_csv_text = re.sub(i, replace_str, my_csv_text)
# Create new csv file and save cleaned text
new_csv_path = './my_new_csv.csv' # or whatever path and name you want
with open(new_csv_path, 'w') as f:
f.write(my_csv_text)
# Create pandas dataframe
df = pd.read_csv('my_new_csv.csv', sep=',', names=['ID', 'Currency'])
print(df)
輸出 df:
ID Currency
0 1234 USD
1 5678 EUR
uj5u.com熱心網友回復:
您需要使用json.loads()或提取資料幀的每一行eval()
像這樣:
import json
for row in df.iteritems():
print(json.loads(row.value)["id"])
# OR
print(eval(row.value)["id"])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/402292.html
標籤:
下一篇:資料框或CSV到JSON物件陣列
