最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在pandas中更改列類型方式

 更新時(shí)間:2025年10月24日 08:43:43   作者:李星星BruceL  
這篇文章主要介紹了在pandas中更改列類型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

在 pandas 中有四個(gè)主要選項(xiàng)來(lái)轉(zhuǎn)換類型:

  1. to_numeric() - 提供功能以安全地將非數(shù)值類型(例如字符串)轉(zhuǎn)換為合適的數(shù)值類型。(另見(jiàn) to_datetime()to_timedelta()。)
  2. astype() - (幾乎)任何類型轉(zhuǎn)換為(幾乎)任何其他類型(即使這樣做不一定合理)。還允許你將類型轉(zhuǎn)換為分類類型(非常有用)。
  3. infer_objects() - 一個(gè)實(shí)用方法,如果可能的話,將包含 Python 對(duì)象的列轉(zhuǎn)換為 pandas 類型。
  4. convert_dtypes() - DataFrame 列轉(zhuǎn)換為支持 pd.NA(pandas 的對(duì)象,用于表示缺失值)的“最佳可能”數(shù)據(jù)類型。

1.to_numeric()

將非數(shù)值對(duì)象(如字符串)轉(zhuǎn)換為整數(shù)或浮點(diǎn)數(shù)的最好方法是使用 pandas 中的 to_numeric() 函數(shù)。

這個(gè)函數(shù)會(huì)嘗試將非數(shù)值對(duì)象(如字符串)轉(zhuǎn)換為適當(dāng)?shù)恼麛?shù)或浮點(diǎn)數(shù)。

基本用法

to_numeric() 的輸入可以是一個(gè) Series 或者一個(gè) DataFrame 的單列。

s = pd.Series(["8", "6", "7.5", "3", "0.9"])  # 合字符串和數(shù)值
s = pd.to_numeric(s)  # 轉(zhuǎn)換為浮點(diǎn)值

可以看到,返回了一個(gè)新的 Series。你可以將其賦值給一個(gè)變量或列名以便繼續(xù)使用:

my_series = pd.to_numeric(my_series)

你也可以使用 apply() 方法來(lái)轉(zhuǎn)換 DataFrame 的多列:

df = df.apply(pd.to_numeric)  # 轉(zhuǎn)換 `DataFrame` 的所有列

或者只轉(zhuǎn)換特定的列:

df[["a", "b"]] = df[["a", "b"]].apply(pd.to_numeric)

只要你的值都可以被轉(zhuǎn)換,這可能就是你需要的所有操作。

錯(cuò)誤處理

但如果有些值無(wú)法轉(zhuǎn)換為數(shù)值類型怎么辦?

to_numeric() 接受一個(gè) errors 關(guān)鍵字參數(shù),允許你強(qiáng)制非數(shù)值值為 NaN,或者簡(jiǎn)單地忽略包含這些值的列。

以下是一個(gè)使用字符串 Series 的示例,該 Series 有對(duì)象數(shù)據(jù)類型:

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

默認(rèn)行為是在無(wú)法轉(zhuǎn)換值時(shí)引發(fā)異常。在這種情況下,它無(wú)法處理字符串 ‘pandas’:

pd.to_numeric(s, errors='raise')

ValueError: Unable to parse string

與其失敗,我們可能希望 ‘pandas’ 被視為缺失或無(wú)效的數(shù)值,并將其轉(zhuǎn)換為 NaN,如下所示:

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

第三個(gè)選項(xiàng)是,如果遇到無(wú)效值,則忽略操作:

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

原始 Series 將保持不變。

最后一個(gè)選項(xiàng)特別適用于轉(zhuǎn)換整個(gè) DataFrame,但不知道哪些列可以可靠地轉(zhuǎn)換為數(shù)值類型。

在這種情況下,只需寫:

df.apply(pd.to_numeric, errors='ignore')

該函數(shù)將應(yīng)用于 DataFrame 的每一列??梢赞D(zhuǎn)換為數(shù)值類型的列將被轉(zhuǎn)換,而不能轉(zhuǎn)換的列(例如,它們包含非數(shù)字字符串或日期)將保持不變。

下采樣 (Downcasting)

默認(rèn)情況下,使用 to_numeric() 換時(shí),你會(huì)得到 int64float64 數(shù)據(jù)類型(或者平臺(tái)原生的任何整數(shù)寬度)。

這通常是你要的結(jié)果,但如果你想要節(jié)省內(nèi)存并使用更緊湊的數(shù)據(jù)類型,比如 float32int8 么辦?

to_numeric() 給你選擇下采樣的選項(xiàng),可以轉(zhuǎn)換為 'integer'、'signed'、'unsigned''float'。以下是一個(gè)簡(jiǎn)單的整數(shù)類型 Series 示例:

s = pd.Series([1, 2, -7])

下采樣到 'integer' 使用可以容納值的最小可能整數(shù):

pd.to_numeric(s, downcast='integer')

下采樣到 'float' 同樣選擇比正常浮點(diǎn)類型更小的類型:

pd.to_numeric(s, downcast='float')

結(jié)果將是 float32。

2.astype()

astype() 方法允許你明確指定 DataFrame 或 Series 的數(shù)據(jù)類型。它非常靈活,可以嘗試從一種類型轉(zhuǎn)換為另一種類型。

基本用法

只需選擇一個(gè)類型:你可以使用 NumPy 數(shù)據(jù)類型(例如 np.int16)、一些 Python 類型(例如 bool),或者 pandas 特定的類型(如分類數(shù)據(jù)類型)。

在你想轉(zhuǎn)換的對(duì)象上調(diào)用該方法,astype() 將嘗試并為你進(jìn)行轉(zhuǎn)換:

# 將所有 DataFrame 列轉(zhuǎn)換為 int64 類型
df = df.astype(int)

# 列 "a" 轉(zhuǎn)換為 int64 類型,將列 "b" 轉(zhuǎn)換為復(fù)數(shù)類型
df = df.astype({"a": int, "b": complex})

# 將 Series 轉(zhuǎn)換為 float16 類型
s = s.astype(np.float16)

# 將 Series 轉(zhuǎn)換為 Python 字符串
s = s.astype(str)

# 將 Series 轉(zhuǎn)換為分類類型 - 請(qǐng)參閱文檔以獲取更多詳細(xì)信息
s = s.astype('category')

請(qǐng)注意我說(shuō)的是“嘗試”——如果 astype() 不知道如何轉(zhuǎn)換 Series 或 DataFrame 中的值,它將引發(fā)錯(cuò)誤。

例如,如果你有一個(gè) NaNinf ,嘗試將其轉(zhuǎn)換為整數(shù)時(shí)會(huì)得到錯(cuò)誤。

從 pandas 0.20.0 開始,可以通過(guò)傳遞 errors='ignore' 來(lái)抑制此錯(cuò)誤。你的原始對(duì)象將保持不變。

注意事項(xiàng)

astype() 是強(qiáng)大的,但它有時(shí)會(huì)“錯(cuò)誤地”轉(zhuǎn)換值。例如:

>>> s = pd.Series([1, 2, -7])
>>> s
0    1
1    2
2   -7
dtype: int64

這些是小整數(shù),那么將其轉(zhuǎn)換為無(wú)符號(hào) 8 位類型以節(jié)省內(nèi)存如何?

>>> s.astype(np.uint8)
0     1
1     2
2    249
dtype: uint8

轉(zhuǎn)換成功了,但 -7 繞了一圈變成了 249(即 (2^8 - 7))!

嘗試使用 pd.to_numeric(s, downcast='unsigned') 行下采樣可能會(huì)避免這個(gè)錯(cuò)誤。

3.infer_objects()

pandas 版本 0.21.0 引入了 infer_objects() 方法,用于將 DataFrame 中具有對(duì)象數(shù)據(jù)類型的列轉(zhuǎn)換為更具體的數(shù)據(jù)類型(軟轉(zhuǎn)換)。

例如,這里有一個(gè) DataFrame,包含兩列對(duì)象類型。一列持有實(shí)際的整數(shù),另一列持有表示整數(shù)的字符串:

>>> df = pd.DataFrame({'a': [7, 1, 5], 'b': ['3', '2', '1']}, 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’ 保持不變,因?yàn)槠渲凳亲址?,而不是整?shù)。如果你想強(qiáng)制將兩列都轉(zhuǎn)換為整數(shù)類型,可以使用 df.astype(int)。

4.convert_dtypes()

版本 1.0 及以上包括一個(gè)方法 convert_dtypes(),用于將 Series 和 DataFrame 列轉(zhuǎn)換為支持 pd.NA 缺失值的最佳可能數(shù)據(jù)類型。

這里的“最佳可能”是指最適合存儲(chǔ)這些值的數(shù)據(jù)類型。例如,如果所有值都是整數(shù)(或缺失值),則會(huì)轉(zhuǎn)換為 pandas 整數(shù)類型;如果 Python 整數(shù)對(duì)象的列被轉(zhuǎn)換為 Int64,NumPy int32 值的列將變?yōu)?pandas 數(shù)據(jù)類型 Int32。

對(duì)于我們的對(duì)象 DataFrame df,我們得到以下結(jié)果:

>>> df.convert_dtypes().dtypes
a    Int64
b    string
dtype: object

由于列 ‘a’ 包含整數(shù)值,因此被轉(zhuǎn)換為 Int64 類型(能夠存儲(chǔ)缺失值,與 int64 不同)。

列 ‘b’ 包含字符串對(duì)象,因此被轉(zhuǎn)換為 pandas string 類型。

默認(rèn)情況下,此方法會(huì)從每列的對(duì)象值推斷類型。我們可以通過(guò)傳遞 infer_objects=False 來(lái)更改這一點(diǎn):

>>> df.convert_dtypes(infer_objects=False).dtypes
a    object
b    string
dtype: object

現(xiàn)在列 ‘a’ 仍然是一個(gè)對(duì)象列:pandas 知道它可以被描述為一個(gè)整數(shù)列(內(nèi)部運(yùn)行了 infer_dtype),但沒(méi)有推斷出它應(yīng)該具有的確切數(shù)據(jù)類型,因此沒(méi)有轉(zhuǎn)換它。列 ‘b’ 再次被轉(zhuǎn)換為 string 類型,因?yàn)樗蛔R(shí)別為持有字符串值。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python并發(fā)編程多進(jìn)程 互斥鎖原理解析

    python并發(fā)編程多進(jìn)程 互斥鎖原理解析

    這篇文章主要介紹了python并發(fā)編程多進(jìn)程 互斥鎖原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python功能點(diǎn)實(shí)現(xiàn):函數(shù)級(jí)/代碼塊級(jí)計(jì)時(shí)器

    Python功能點(diǎn)實(shí)現(xiàn):函數(shù)級(jí)/代碼塊級(jí)計(jì)時(shí)器

    今天小編就為大家分享一篇關(guān)于Python功能點(diǎn)實(shí)現(xiàn):函數(shù)級(jí)/代碼塊級(jí)計(jì)時(shí)器,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 詳解Python Flask框架的安裝及應(yīng)用

    詳解Python Flask框架的安裝及應(yīng)用

    Flask誕生于愚人節(jié)開的一個(gè)玩笑,后來(lái)逐漸發(fā)展成為一個(gè)成熟的 Python Web框架,越來(lái)越受到開發(fā)者的喜愛(ài)。本文將以一個(gè)博客后臺(tái)為例,詳解Flask框架的安裝及應(yīng)用,需要的可以參考一下
    2022-05-05
  • Python中CSV文件的讀寫庫(kù)操作方法

    Python中CSV文件的讀寫庫(kù)操作方法

    Python 中提供了一個(gè)官方的標(biāo)準(zhǔn)庫(kù)來(lái)處理這種文件類型,那就是 CSV 庫(kù),這篇文章主要介紹了Python中CSV文件的讀寫庫(kù),需要的朋友可以參考下
    2022-12-12
  • 解決Django后臺(tái)ManyToManyField顯示成Object的問(wèn)題

    解決Django后臺(tái)ManyToManyField顯示成Object的問(wèn)題

    今天小編就為大家分享一篇解決Django后臺(tái)ManyToManyField顯示成Object的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • Python模擬登錄的多種方法(四種)

    Python模擬登錄的多種方法(四種)

    這篇文章主要介紹了Python模擬登錄的多種方法,大概給大家提供了四種方法,每種方法給大家介紹的都很詳細(xì),感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-06-06
  • Python中文本和數(shù)字相等判斷方式

    Python中文本和數(shù)字相等判斷方式

    這篇文章主要介紹了Python中文本和數(shù)字相等判斷方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Python SQLite3簡(jiǎn)介

    Python SQLite3簡(jiǎn)介

    這篇文章主要為大家詳細(xì)介紹了Python SQLite3的簡(jiǎn)單介紹以及使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 跟老齊學(xué)Python之私有函數(shù)和專有方法

    跟老齊學(xué)Python之私有函數(shù)和專有方法

    這篇文章是老齊學(xué)Python系列文章的一篇,主要介紹了跟私有函數(shù)和專有方法,需要的朋友可以參考下
    2014-10-10
  • Python實(shí)現(xiàn)二叉排序樹與平衡二叉樹的示例代碼

    Python實(shí)現(xiàn)二叉排序樹與平衡二叉樹的示例代碼

    樹表查詢即借助具有特殊性質(zhì)的樹數(shù)據(jù)結(jié)構(gòu)進(jìn)行關(guān)鍵字查找,本文所涉及到的特殊結(jié)構(gòu)性質(zhì)的樹包括:二叉排序樹、平衡二叉樹。文中詳細(xì)介紹了二者的實(shí)現(xiàn)代碼,需要的可以參考一下
    2022-04-04

最新評(píng)論

东源县| 农安县| 宜阳县| 隆尧县| 陇南市| 绵阳市| 本溪市| 盖州市| 长白| 文成县| 乌苏市| 平原县| 社会| 习水县| 葫芦岛市| 保靖县| 盘山县| 绥棱县| 赤水市| 阳朔县| 陵水| 山阴县| 平潭县| 武穴市| 阳原县| 藁城市| 沁水县| 北京市| 建瓯市| 张家港市| 阜新| 广饶县| 甘肃省| 板桥市| 泌阳县| 阳东县| 遵义县| 府谷县| 手机| 麦盖提县| 中牟县|