在Pandas中更改列的資料型別 方法總結

2021-08-14 23:30:36 字數 2949 閱讀 3048

先看乙個非常簡單的例子:

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]

df = pd.dataframe(a)

有什麼方法可以將列轉換為適當的型別?例如,上面的例子,如何將列2和3轉為浮點數?有沒有辦法將資料轉換為dataframe格式時指定型別?或者是建立dataframe,然後通過某種方法更改每列的型別?理想情況下,希望以動態的方式做到這一點,因為可以有數百個列,明確指定哪些列是哪種型別太麻煩。可以假定每列都包含相同型別的值。

可以用的方法簡單列舉如下:

如果要建立乙個dataframe,可以直接通過dtype引數指定型別:

df = pd.dataframe(a, dtype='float')  #示例1

df = pd.dataframe(data=d, dtype=np.int8) #示例2

df = pd.read_csv("somefile.csv", dtype = )

下面是乙個字串seriess的例子,它的dtype為object

>>> s = pd.series(['1', '2', '4.7', 'pandas', '10'])

>>> s01

1224.7

3 pandas410

dtype: object

使用to_numeric轉為數值。預設情況下,它不能處理字母型的字串'pandas':

>>> pd.to_numeric(s) # or pd.to_numeric(s, errors='raise')

valueerror: unable to parse string

可以將無效值強制轉換為nan,如下所示:

>>> pd.to_numeric(s, errors='coerce')

01.0

12.0

24.7

3 nan

410.0

dtype: float64

如果遇到無效值,第三個選項就是忽略該操作:

>>> pd.to_numeric(s, errors='ignore')

# the original series is returned untouched

對於某個dataframe:

>>> a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]

>>> df = pd.dataframe(a, columns=['col1','col2','col3'])

>>> df

col1 col2 col3

0 a 1.2

4.21 b 70

0.03

2 x 5

0

然後可以寫:

那麼'col2'和'col3'根據需要具有float64型別。

但是,可能不知道哪些列可以可靠地轉換為數字型別。在這種情況下,設定引數:

然後該函式將被應用於整個dataframe,可以轉換為數字型別的列將被轉換,而不能(例如,它們包含非數字字串或日期)的列將被單獨保留。

另外pd.to_datetimepd.to_timedelta可將資料轉換為日期和時間戳。

版本0.21.0引入了infer_objects()方法,用於將具有物件資料型別的dataframe的列轉換為更具體的型別。

例如,用兩列物件型別建立乙個dataframe,其中乙個儲存整數,另乙個儲存整數的字串:

>>> df = pd.dataframe(, dtype='object')

>>> df.dtypes

a object

b object

dtype: object

然後使用infer_objects(),可以將列'a'的型別更改為int64:

>>> df = df.infer_objects()

>>> df.dtypes

a int64

b object

dtype: object

由於'b'的值是字串,而不是整數,因此'b'一直保留。

如果試圖強制將兩列轉換為整數型別,可以使用df.astype(int)

示例如下:

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]

df = pd.dataframe(a, columns=['one', 'two', 'three'])

dfout[16]:

one two three

0 a 1.2

4.21 b 70

0.03

2 x 5

0df.dtypes

out[17]:

one object

two object

three object

df[['two', 'three']] = df[['two', 'three']].astype(float)

df.dtypes

out[19]:

one object

two float64

three float64

在Pandas中更改列的資料型別

先看乙個非常簡單的例子 a a 1.2 4.2 b 70 0.03 x 5 0 df pd.dataframe a 有什麼方法可以將列轉換為適當的型別?例如,上面的例子,如何將列2和3轉為浮點數?有沒有辦法將資料轉換為dataframe格式時指定型別?或者是建立dataframe,然後通過某種方法更...

在Pandas中更改列的資料型別 方法總結

先看乙個非常簡單的例子 a a 1.2 4.2 b 70 0.03 x 5 0 df pd.dataframe a 有什麼方法可以將列轉換為適當的型別?例如,上面的例子,如何將列2和3轉為浮點數?有沒有辦法將資料轉換為dataframe格式時指定型別?或者是建立dataframe,然後通過某種方法更...

pandas中的更改資料型別

在處理資料時,可能會遇到資料型別不一致的問題。例如,通過爬蟲採集到的資料都是整型的資料,在使用資料時希望保留兩位小數點,這時就需要將資料的型別轉換成浮點型。針對這種問題,既可以建立pandas物件時明確指定資料的型別,也可以使用astype 方法和to numeric 函式進行轉換,具體如下。一 通...