日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中dtypes_关于python:如何通过pandas DataFrame中的列设置dtypes

發布時間:2025/4/5 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中dtypes_关于python:如何通过pandas DataFrame中的列设置dtypes 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我想將一些數據帶入pandas DataFrame,并為導入時的每一列分配dtypes。 我希望能夠對具有許多不同列的較大數據集執行此操作,但是,例如:

myarray = np.random.randint(0,5,size=(2,2))

mydf = pd.DataFrame(myarray,columns=['a','b'], dtype=[float,int])

mydf.dtypes

結果是:

TypeError: data type not understood

我嘗試了其他一些方法,例如:

mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': int})

TypeError: object of type 'type' has no len()

如果我放dtype=(float,int),它將浮點格式應用于兩列。

最后,我希望能夠將其傳遞給數據類型列表,就像我將其傳遞給列名稱列表一樣。

dtype的參數應該是有效的numpy dtype(并且不支持結構化dtype),因此列表或字典將不起作用。 一種可能的方法是分別為每個列進行分類。 或者首先創建一個結構化的numpy數組,并將其提供給DataFrame。

我知道我可以在循環中分別分配每個對象,但令我驚訝的是dtype =不夠靈活,無法容納列表。 不過感謝您的回答,很高興得到確認:)

github.com/pydata/pandas/issues/4464目前是一個未解決的問題(如果您想執行拉取請求,那就太好了)

只是為了好玩:有人使用read_csv解決了這個問題:stackoverflow.com/a/38524255/6646912:D

我剛遇到這個問題,而熊貓問題仍未解決,所以我發布了解決方法。假設df是我的DataFrame,而dtype是將列名稱映射到類型的字典:

for k, v in dtype.items():

df[k] = df[k].astype(v)

(注意:在python 2中使用dtype.iteritems())

供參考:

允許的數據類型列表(NumPy dtypes):https://docs.scipy.org/doc/numpy-1.12.0/reference/arrays.dtypes.html

熊貓還支持其他一些類型。例如category:http://pandas.pydata.org/pandas-docs/stable/categorical.html

相關的GitHub問題:https://github.com/pandas-dev/pandas/issues/9287

我需要使用for k, v in dtype.iteritems():才能正常工作。

可以將其更改為df.astype(dtype)

對于某些類型轉換,此方法嚴重失敗:stackoverflow.com/questions/54393266/

您可能希望嘗試將Series對象的字典傳遞給DataFrame構造函數-它會為您提供對創建的更多具體控制,并且希望可以更清楚地了解發生了什么。模板版本(data1可以是數組等):

df = pd.DataFrame({'column1':pd.Series(data1, dtype='type1'),

'column2':pd.Series(data2, dtype='type2')})

并舉例說明數據:

df = pd.DataFrame({'A':pd.Series([1,2,3], dtype='int'),

'B':pd.Series([7,8,9], dtype='float')})

print (df)

A ?B

0 ?1 ?7.0

1 ?2 ?8.0

2 ?3 ?9.0

print (df.dtypes)

A ? ? int32

B ? ?float64

dtype: object

從pandas 0.24.2版本(當前的穩定版本)開始,無法將docs類型的數據類型的顯式列表傳遞給DataFrame構造函數:

dtype : dtype, default None

Data type to force. Only a single dtype is allowed. If None, infer

但是,dataframe類確實具有靜態方法,允許您將numpy結構化數組轉換為數據框,因此您可以執行以下操作:

>>> myarray = np.random.randint(0,5,size=(2,2))

>>> record = np.array(map(tuple,myarray),dtype=[('a',np.float),('b',np.int)])

>>> mydf = pd.DataFrame.from_records(record)

>>> mydf.dtypes

a ? ?float64

b ? ? ?int64

dtype: object

在處理數據類型時,應將它們作為字符串傳遞。

例如,您遵循的后一種方法應修改為

mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': **'int'**})

代替

mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': **int**})。

dtype (int, float etc.)應該以字符串形式給出。

或者作為替代方法(如果您不想作為字符串傳遞)

將numpy導入為np并使用

mydf = pd.DataFrame(myarray,columns=['a','b'], dtype={'a': **np.int**})

我不明白為什么**在那里。 那是不正確的語法。 將它們取出,放在mydf = pd.DataFrame(myarray,columns=[a,b], dtype={a: **np.int**})的最后一行,它仍然不起作用:它給出了TypeError: data type not understood。

總結

以上是生活随笔為你收集整理的python中dtypes_关于python:如何通过pandas DataFrame中的列设置dtypes的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。