[英]Convert dictionary of dictionaries to dataframe with data types
將字典字典轉換為具有數據類型的數據框的首選方法是什么?
我有以下類型的字典r
,其中包含每個鍵后面的事實集
import pandas as pd
r = { 1:{'a':1,'b':2,'c':'b'},
2:{'d':1,'b':1,'c':'b'},
3:{'e':0} }
可以通過一種非常簡單的方式將這個字典字典轉換為數據框
x = pd.DataFrame(r)
x
x.dtypes
在原始字典字典上產生以下版本
1 2 3
a 1 NaN NaN
b 2 1 NaN
c b e NaN
d NaN 1 NaN
e NaN NaN 0.0
以及列的以下數據類型
1 object
2 object
3 float64
dtype: object
但是,我想在x
上調換版本。 這樣做之后
y = x.transpose()
y
y.dtypes
似乎數據的預期表示以矩陣形式顯示
a b c d e
1 1 2 b NaN NaN
2 NaN 1 e 1 NaN
3 NaN NaN NaN NaN 0
但數據類型都是object
a object
b object
c object
d object
e object
dtype: object
從r
到y
進行這種轉換以便y.dtypes
直接產生數據類型的首選方法是什么
a float64
b float64
c object
d float64
e float64
dtype: object
類似於將r
轉換為x
?
只需設置正確的方向(默認為columns
,您需要index
)。
df = pd.DataFrame.from_dict(r, orient='index')
a float64
b float64
c object
d float64
e float64
dtype: object
在pandas
>= 1.0.0 你可以使用.convert_dtypes()
:
>>> y.convert_dtypes().dtypes
a Int64
b Int64
c string
d Int64
e Int64
dtype: object
請注意,這使用了新的pandas
字符串類型,並且還將使用pd.NA
來處理缺失值。 有一些參數會影響某些轉換:
>>> y.convert_dtypes(convert_string=False).dtypes
a Int64
b Int64
c object
d Int64
e Int64
dtype: object
如果你有舊pandas
,你可以使用pd.to_numeric
帶有某種循環或apply
,因為在這里:
>>> y = y.apply(pd.to_numeric, errors='ignore') # for columns that fail, do nothing
>>> y.dtypes
a float64
b float64
c object
d float64
e float64
dtype: object
我沒有看到在沒有循環的情況下在整個數據幀上強制執行數字類型的方法( .astype()
似乎不起作用,因為錯誤要么導致整個轉換失敗,要么如果被忽略,則返回原始數據類型)。
我剛剛看到.transpose()
的文檔解決了這一點:
當 DataFrame 具有混合 dtypes 時,我們會得到一個具有對象 dtype 的轉置 DataFrame:
轉置混合類型的 DatraFrame 會返回一個對象類型的 DataFrame。 這是他們為了完整性而復制的示例:
d2 = {'name': ['Alice', 'Bob'],
'score': [9.5, 8],
'employed': [False, True],
'kids': [0, 0]}
df2 = pd.DataFrame(data=d2)
df2_transposed = df2.transpose()
print(df2, df2.dtypes, df2_transposed, df2_transposed.dtypes, sep='\n\n')
輸出:
name score employed kids
0 Alice 9.5 False 0
1 Bob 8.0 True 0
#dtypes as expected
name object
score float64
employed bool
kids int64
dtype: object
0 1
name Alice Bob
score 9.5 8
employed False True
kids 0 0
#dtypes are now object
0 object
1 object
dtype: object
因此,如果要轉換dtypes
,則必須包含其他命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.