[英]Unable to access list from csv file using pandas
我的 csv 文件中有以下內容,我正在嘗試使用 pandas 從 csv 讀取最后一列。 在成功獲取最后一列 x2 之后。 我無法從 output 訪問該列。 相反,如果我嘗試索引 x2 列,我會得到行。 但我想要專欄。
CSV 文件:
symbol,close,low,high,x0,x1,x2
ACC,-1.41,1241.5,1270.0,-1.41,"[1221241.5, 1270, -1.41]","[1241.5, 1270, -1.41]"
ADANIPORTS,-1.61,336.85,346.85,-1.61,"[336.85, 346.85, -1.61]","[336.85, 346.85, -1.61]"
ADANITRANS,3.45,202.8,211.2,3.45,"[202.8, 211.2, 3.45]","[202.8, 211.2, 3.45]"
代碼
import pandas as pd
df = pd.read_csv("tickerdb.csv", index_col=0)
print((df.iloc[:, -1]))
Output
symbol
ACC [1241.5, 1270, -1.41]
ADANIPORTS [336.85, 346.85, -1.61]
ADANITRANS [202.8, 211.2, 3.45]
我嘗試從列表中訪問該列,但我得到的是行。
print((df.iloc[:, -1][1]))
新 Output:
[336.85, 346.85, -1.61]
但預計 output 是列表中的一列,而不是行:
1270
346.85
211.2
我也很好的第二種解決方案是,如果我能以某種方式得到
#Current output from last column using df.iloc
ACC [1241.5, 1270, -1.41]
ADANIPORTS [336.85, 346.85, -1.61]
ADANITRANS [202.8, 211.2, 3.45]
#If I can get like below for x2 column is also fine for me.
symbol low high change
ACC 1241.5 1270 -1.41
ADANIPORTS 336.85 346.85 -1.61
ADANITRANS 202.8 211.2 3.45
以上兩種解決方案中的任何一種都對我有好處。 在此先感謝您的幫助。
如果您調用 df.head() 您將看到您有 6 列數據,但最后 2 列(x1 和 x2)由 python 列表的行組成,這些列表已通過使用引號轉換為字符串:
“[336.85, 346.85, -1.61]”
是第二行 x2 列的值。
從您想要的 output 我認為您想要的是在 x2 列的每一行的索引 1 處獲取值(如果該行是列表,而不是看起來像列表的字符串)。
我認為最好的辦法是考慮重新格式化您的數據,但與此同時,這里有一個 hacky 解決方法:
df = pd.read_csv("tickerdb.csv", index_col=0)
def get_middle_value(series):
middle = [row.split(', ')[1] for row in series]
return middle
print(get_middle_value(df.x2))
嘗試這個:
from ast import literal_eval
df2 = pd.DataFrame(df.x2.apply(lambda x: literal_eval(x)).tolist(), columns=['low', 'high', 'change'])
df2.insert(0, column='symbol', value=df.symbol)
Output:
symbol low high change
0 ACC 1241.50 1270.00 -1.41
1 ADANIPORTS 336.85 346.85 -1.61
2 ADANITRANS 202.80 211.20 3.45
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.