複習用
# 單列
pd.to_numeric(df[0]
)# 多列
df[[0,
1]].
(pd.to_numeric)
# 有無效值報錯
df[[0,
1]].
(pd.to_numeric, errors=
'coerce'
)# 無效值轉換成nan
df[[0,
1]].
(pd.to_numeric, errors=
'ignore'
)# 有無效值取消操作
# 轉換為日期和時間戳
pd.to_datetime
pd.to_timedelta
# 自動推斷
df.infer_objects(
)# astype()
df[[0,
1]]= df[[0
,1]]
.astype(
float
)
先看乙個非常簡單的例子:
a =[[
'a',
'1.2'
,'4.2'],
['b'
,'70'
,'0.03'],
['x'
,'5'
,'0']]
df = pd.dataframe(a)
有什麼方法可以將列轉換為適當的型別?例如,上面的例子,如何將列2和3轉為浮點數?有沒有辦法將資料轉換為dataframe格式時指定型別?或者是建立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 =
)
對於單列或者series
下面是乙個字串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')0
1.01
2.02
4.73 nan
410.0
dtype: float64
如果遇到無效值,第三個選項就是忽略該操作:
>>
> pd.to_numeric(s, errors=
'ignore'
)# the original series is returned untouched
對於多列或者整個dataframe
對於某個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
然後可以寫:
df[
['col2'
,'col3']]
= df[
['col2'
,'col3']]
.(pd.to_numeric)
那麼』col2』和』col3』根據需要具有float64型別。
但是,可能不知道哪些列可以可靠地轉換為數字型別。在這種情況下,設定引數:
df.
(pd.to_numeric, errors=
'ignore'
)
然後該函式將被應用於整個dataframe,可以轉換為數字型別的列將被轉換,而不能(例如,它們包含非數字字串或日期)的列將被單獨保留。
另外pd.to_datetime
和pd.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』一直保留。
astype強制轉換
如果試圖強制將兩列轉換為整數型別,可以使用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
change data type of columns in pandas 在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中更改列的資料型別 方法總結
先看乙個非常簡單的例子 a a 1.2 4.2 b 70 0.03 x 5 0 df pd.dataframe a 有什麼方法可以將列轉換為適當的型別?例如,上面的例子,如何將列2和3轉為浮點數?有沒有辦法將資料轉換為dataframe格式時指定型別?或者是建立dataframe,然後通過某種方法更...