【跟著stackoverflow學Pandas】- Pandas修改列的類型

2021-03-02 上帝的bug
Pandas: change data type of columns - Pandas修改列的類型

我們利用pandas進行數據處理經常會遇到數據類型不符的問題,一般需要進行數據類型的轉化,這篇文章就介紹pandas裡面的數據類型及轉換。

數據集

import pandas as pd
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['col1', 'col2', 'col3'])
print df.head()
# col1 col2 col3
# 0 a 1.2 4.2
# 1 b 70 0.03
# 2 x 5 0

print df.dtypes
# col1 object
# col2 object
# col3 object
# dtype: object

這裡的3列數據,col1是明顯的字符數據,col2、col3是數值型數據,但是因為數據在導入時加了引號,按照字符串數據來處理,如果我們想對他們進行數值操作,就需要進行轉換。

下面我們推薦幾種方法

pd.to_numeric

對於明顯是數值的數據,轉換類型直接採用 pd.to_numeric 就可以了,如果數據既有數值型又有字符型,那麼我們就要根據情況區別對待了。

s = pd.Series(['1', '2', '4.7', 'pandas', '10'])
# pd.to_numeric(s) # 如果直接轉換會報錯
# ValueError: Unable to parse string "pandas" at position 3

# 可以強制轉換,字符型數據就會變成 NaN,數據類型變為 float64
pd.to_numeric(s, errors='coerce')
# 0 1.0
# 1 2.0
# 2 4.7
# 3 NaN
# 4 10.0
# dtype: float64

# 也可以忽略錯誤,結果不做處理
pd.to_numeric(s, errors='ignore')
# 0 1
# 1 2
# 2 4.7
# 3 pandas
# 4 10
# dtype: object

如果有多個列需要轉換,可以採用apply進行批量操作。

df[['col2','col3']] = df[['col2','col3']].apply(pd.to_numeric, errors='ignore') # 同樣可以添加 errors 參數
print df
# col1 col2 col3
# 0 a 1.2 4.20
# 1 b 70.0 0.03
# 2 x 5.0 0.00

print df.dtypes
# col1 object
# col2 float64
# col3 float64
# dtype: object

相似的函數,還有 pd.to_datetime、pd.to_timedelta,可以實現對時間的轉換。

astype

pd.to_numeric 用起來很簡單,但是它把所有的變量都變成了float64,那麼如果數據是整形呢。我們可以試試 astype 函數。

a = [['a', '1', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a, columns=['one', 'two', 'three'])
print df
# one two three
# 0 a 1 4.2
# 1 b 70 0.03
# 2 x 5 0

print df.dtypes
# one object
# two object
# three object
# dtype: object

# 批量操作
df[['two', 'three']] = df[['two', 'three']].astype(float)
print df.dtypes
# one object
# two float64
# three float64
# dtype: object


df['two'] = df['two'].astype(int)
print df.dtypes
# one object
# two int64
# three float64
# dtype: object

生成DataFrame時指定變量類型


df = pd.DataFrame(a, columns=['one', 'two', 'three'], dtype={'one': str, 'two': int, 'three': float})


infer_objects

如果數據很多無法判斷數據類型,可以採用 infer_objects(Pandas Version 0.21.0)

df = pd.DataFrame({'a': [7, 1, 5], 'b': ['3','2','1']}, dtype='object')
df.dtypes
# a object
# b object
# dtype: object

df = df.infer_objects()
df.dtypes
# a int64
# b object # 因為b列加了引號,推斷成了字符串
# dtype: object

相關焦點

  • 數據分析之Pandas變形操作總結
    參考學習:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.stack.html?highlight=stack#pandas.DataFrame.stack2). unstack:stack的逆函數,功能上類似於pivot_table。表達式:DataFrame.unstack(self,level = -1,fill_value = None)
  • 當pandas遇上數據類型問題
    而在pandas中,一般情況下會根據我們導入的數據,自動分配最合適的數據類型。但是有時候pandas也會犯錯,這時候我們就需要diy自定義數據類型。本文主要將pandas的dtype,如何進行數據類型的操作。pands數據類型數據類型是程式語言的基礎性概念,ta會告訴電腦如何存儲數據、如何操作數據。
  • pandas入門
    (註:只有第5章--pandas入門部分,使用jupyter notebook打開,代碼已通過測試,後續章節請追隨更新)1、pandas的數據結構       pandas有兩個主要的數據結構:Series和DataFrame。Series是一種類似於一維數組的對象,它由一組數據(各種Numpy數據類型)以及一組與之相關的數據標籤(即索引)組成。
  • 十分鐘學習pandas! pandas常用操作總結!
    ,熟練使用pandas是從sql boy/girl 跨越到一名優秀的數據分析師傅的必備技能。這篇pandas常用操作總結幫大家回顧下pandas的常用語法,尤其是我們分析數據時常用的方法。文末還有pandas的cheat sheet,幫助你記住常見的pandas操作。
  • 十分鐘學習pandas!pandas常用操作總結!
    學習Python, 當然少不了pandas,pandas是python數據科學中的必備工具,熟練使用pandas是從sql boy/girl 跨越到一名優秀的數據分析師傅的必備技能。這篇pandas常用操作總結幫大家回顧下pandas的常用語法,尤其是我們分析數據時常用的方法。
  • 數據分析之Pandas
    1.1.Series1.1.1.series創建Pandas系列可以使用以下構造函數創建pandas.Series( data, index, dtype, copy)系列(Series)是能夠保存任何類型的數據(整數,字符串,浮點數,Python對象等)的一維標記數組。軸標籤統稱為索引。
  • 超全的pandas數據分析常用函數總結:上篇
    所有列的數據類型data['id'].dtype # 某一列的數據類型data.ndim # 數據維度data.index # 行索引data.columns # 列索引data.values # 對象值
  • pandas讀取表格後的常用數據處理操作
    /hotel.xlsx", header=None, sep=',', nrows=10)print(tabledata)names:用於結果的列名列表,如果數據文件中沒有列標題行,就需要執行header=Nonename_columns = [' ','名字','類型', '城市', '地區', '地點',
  • python-pandas讀寫csv數據
    否則就沒有列的定義了。usecols=[0,1,2,...] #需要讀取的列,可以是列的位置編號,也可以是列的名稱parse_dates = ['col_name'] # 指定某行讀取為日期格式 index_col = None /False /0,重新生成一列成為index值,0表示第一列,用作行索引的列編號或列名。
  • PANDAS: 新手教程 一
    查看Pandas read_excel API了解更多詳細信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.htmlPandas支持很多其他數據類型。
  • paipai教你pandas(1) DataFrame的列維度操作
    paipai教你pandas教程系列的第1篇文章,DataFrame是表格型的數據類型,有列和行兩個維度,本篇教程講解pandas
  • 超全的pandas數據分析常用函數總結:下篇
    列重疊,且沒有指定後綴,因為上面的數據data和data2都有「id」列,所以需要給id列指明後綴。第一種修改方式:data.join(data2,lsuffix更多關於pandas.DataFrame.loc的用法,戳下面官方連結:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html#pandas.DataFrame.loc
  • 從pandas中的這幾個函數,我看懂了道家「一生二、二生三、三生萬物」
    從數據讀寫到預處理、從數據分析到可視化,pandas提供了一站式服務。而其中的幾個聚合統計函數,不僅常用更富有辯證思想,細品之下不禁讓人拍手稱快、直呼叫好!接收一個series類型作為輸入,返回一個去重後的一維ndarray對象作為輸出。正因為各列的返回值是一個ndarray,而對於一個dataframe對象各列的唯一值ndarray長度可能不一致,此時無法重組成一個二維ndarray,從這個角度可以理解unique不適用於dataframe的原因。仍以前述為例,想統計所有開課的課程名,則可用如下語句:
  • pandas使用的100個trick
    (data)利用pandas_profiling這個包,可以一行代碼查看data(dataframe類型)中各個列的情況,包括各種圖表,也方便保存數據報告為html文件方便查看#保存數據報告profile=pandas_profiling.ProfileReport(data)profile.to_file(output_file="your_report.html
  • Pandas從小白到大師學習指南
    在處理數據之前,了解數據並為數據框的每一列選擇合適的類型是很重要的一步。在內部,Pandas 將數據框存儲為不同類型的 numpy 數組(比如一個 float64 矩陣,一個 int32 矩陣)。它可以通過兩種簡單的方法節省高達 90% 的內存使用:除了降低數值類型的大小(用 int32 而不是 int64)外,Pandas 還提出了分類類型:https://pandas.pydata.org/pandas-docs/stable/user_guide/categorical.html如果你是用 R 語言的開發人員,你可能覺得它和 factor 類型是一樣的。
  • 數據科學 | pandas數據導入與導出
    如果進一步想讓a、b生成列的話,調用reset_index方法即可。但是如果我們想把字典的key和value分別生成兩列,如何操作呢?一種方法是:還有一種方法依然是利用from_dict,不過就需要將value中的list提前轉化成字符串,然後再進行操作即可。
  • Pandas數據清洗系列:read_csv函數詳解(二)
    dtypecsv文件中的各個列數據是純字符,本身並沒有什麼數據類型。但是read_csv將其讀入DataFrame時,會推斷各個列的數據類型。這裡int64和float64都是numpy中的數據類型,表示64位整型數據和浮點型數據。object則可以看作是pandas中的字符串類型。pandas默認處理的結果我們並不滿意,例如第一列id,我們發現原始數據是字符01、02、03,pandas卻處理成了純整數1、2、3。如果我們想對此進行修改,就可以使用dtype這個參數。
  • Pandas進階Excel(一)——讀取
    今天開始介紹python可以操作Excel的另一個強大的庫——pandas庫。個人認為,pandas庫對於操作Excel有著極好的支撐。在數據導入、數據清洗、數據計算、數據導出都有著完整性的支撐,是一個提供高性能易用數據類型和分析工具,並且用一段時間你就會發現如果拿pandas只操作表格數據,是真的大材小用。 它不僅可以處理數據,更可以可視化數據。譬如可以做出這樣的圖表。
  • Pandas的數據過濾
    Pandas提供了一系列根據行和列的位置和標籤選擇數據的方法。此外,Pandas還允許你根據列類型獲取數據子集,並使用布爾索引篩選行。3.按數據類型選擇列我們可以使用pandas.DataFrame.select類型(include=None,exclude=None)根據列的數據類型選擇列。該方法接受參數include和exclude中的列表或單個數據類型。
  • Pandas知識點-Series數據結構介紹
    <class 'pandas.core.series.Series'>Series數據結構是一種類似於一維數組的數據對象,由一組數據(numpy中的數據類型)和行索引構成。因為數據是一維的(只有一列),所以Series只有行索引,沒有列索引。