前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pandas类型操作

Pandas类型操作

作者头像
皮大大
发布2023-08-25 11:39:34
2100
发布2023-08-25 11:39:34
举报

pandas数据类型操作

介绍Pandas中3个常见的数据类型操作方法:

  • to_numeric
  • astype
  • to_datetime
  • select_dtypes
代码语言:javascript
复制
import pandas as pd
import numpy as np

Pandas字段类型

to_numeric()

官网地址:https://pandas.pydata.org/docs/reference/api/pandas.to_numeric.html

代码语言:javascript
复制
pandas.to_numeric(arg,  # scalar, list, tuple, 1-d array, or Series
                  errors='raise',  # ‘ignore’, ‘raise’, ‘coerce’;默认是raise
                  downcast=None)

errors的3种取值情况:

  • ignore:无效解析时直接返回输入
  • raise:无效解析引发异常
  • coerce:无效解析设置为NaN

downcast的使用:

  1. 字符串形式,默认是None,可以是‘integer’, ‘signed’, ‘unsigned’, or ‘float’
  2. 如果不是None,且已经转化成了某个数值型,才会向下个等级的数值类型转化
  3. 不同的数值类型
    • 有符号整型:integer or signed,最小等级为np.int8
    • 无符号整型:unsigned,最小等级为np.uint8
    • 浮点型: 最小等级为np.float32

案例:假“数值型”

代码语言:javascript
复制
s = pd.Series(["2.0", '1', -3, 5.0])  # 数值(类似)
s
代码语言:javascript
复制
0    2.0
1      1
2     -3
3    5.0
dtype: object

默认是object类型,也就是字符串。下面转成数值型:

代码语言:javascript
复制
# 1、默认转成float64

pd.to_numeric(s)
代码语言:javascript
复制
0    2.0
1    1.0
2   -3.0
3    5.0
dtype: float64
代码语言:javascript
复制
# 2、指定类型

pd.to_numeric(s, downcast="integer")
代码语言:javascript
复制
0    2
1    1
2   -3
3    5
dtype: int8
代码语言:javascript
复制
# 3、指定类型

pd.to_numeric(s, downcast="signed")
代码语言:javascript
复制
0    2
1    1
2   -3
3    5
dtype: int8
代码语言:javascript
复制
# 4、指定类型

pd.to_numeric(s, downcast="unsigned")
代码语言:javascript
复制
0    2.0
1    1.0
2   -3.0
3    5.0
dtype: float64
代码语言:javascript
复制
# 5、指定类型

pd.to_numeric(s, downcast="float")
代码语言:javascript
复制
0    2.0
1    1.0
2   -3.0
3    5.0
dtype: float32

案例2:数值+字符串

代码语言:javascript
复制
s1 = pd.Series(["2.0", 'pandas', -3, 5.0])  # 数值+字符串
s1
代码语言:javascript
复制
0       2.0
1    pandas
2        -3
3       5.0
dtype: object
代码语言:javascript
复制
# pd.to_numeric(s1)   # 默认是会抛出异常
代码语言:javascript
复制
# 忽略异常

pd.to_numeric(s1, errors="ignore")
代码语言:javascript
复制
0       2.0
1    pandas
2        -3
3       5.0
dtype: object
代码语言:javascript
复制
# pd.to_numeric(s1, errors="raise")   # 无效解析引发异常
代码语言:javascript
复制
# 无效解析设置为None

pd.to_numeric(s1, errors="coerce")
代码语言:javascript
复制
0    2.0
1    NaN
2   -3.0
3    5.0
dtype: float64
代码语言:javascript
复制
# 无效解析设置为None

pd.to_numeric(s1, errors="coerce", downcast="float")
代码语言:javascript
复制
0    2.0
1    NaN
2   -3.0
3    5.0
dtype: float32
代码语言:javascript
复制
# 无效解析设置为None,最后用0代替

pd.to_numeric(s1, errors="coerce").fillna(0)
代码语言:javascript
复制
0    2.0
1    0.0
2   -3.0
3    5.0
dtype: float64

案例3-数值型

代码语言:javascript
复制
s2 = pd.Series([1,2.0,3.0], dtype="float64")
s2
代码语言:javascript
复制
0    1.0
1    2.0
2    3.0
dtype: float64
代码语言:javascript
复制
s3 = pd.to_numeric(s2, downcast="float")
s3
代码语言:javascript
复制
0    1.0
1    2.0
2    3.0
dtype: float32
代码语言:javascript
复制
s4 = pd.to_numeric(s2, downcast="integer")
s4
代码语言:javascript
复制
0    1
1    2
2    3
dtype: int8

类型转化的优势之一:节省内存资源。比较上面3种不同数值类型下的数据所占内存大小:

代码语言:javascript
复制
print("memory of float64: ", s2.memory_usage())
print("memory of float32: ", s3.memory_usage())
print("memory of int8: ", s4.memory_usage())
代码语言:javascript
复制
memory of float64:  152
memory of float32:  140
memory of int8:  131

astype

另一种转化的方法:astype

代码语言:javascript
复制
s2
代码语言:javascript
复制
0    1.0
1    2.0
2    3.0
dtype: float64
代码语言:javascript
复制
s2.astype("float32")
代码语言:javascript
复制
0    1.0
1    2.0
2    3.0
dtype: float32
代码语言:javascript
复制
s2.astype("int64")
代码语言:javascript
复制
0    1
1    2
2    3
dtype: int64
代码语言:javascript
复制
s2.astype("int32")
代码语言:javascript
复制
0    1
1    2
2    3
dtype: int32
代码语言:javascript
复制
s2.astype("category")
代码语言:javascript
复制
/Applications/downloads/anaconda/anaconda3/lib/python3.7/site-packages/pandas/io/formats/format.py:1429: FutureWarning: Index.ravel returning ndarray is deprecated; in a future version this will return a view on self.
  for val, m in zip(values.ravel(), mask.ravel())





0    1.0
1    2.0
2    3.0
dtype: category
Categories (3, float64): [1.0, 2.0, 3.0]

to_datetime()

代码语言:javascript
复制
pandas.to_datetime(arg,
                   errors='raise',
                   dayfirst=False,
                   yearfirst=False,
                   utc=None,
                   format=None,
                   exact=True,
                   unit=None,
                   infer_datetime_format=False,
                   origin='unix',
                   cache=True)
代码语言:javascript
复制
df = pd.DataFrame({"Year":[2022,2021,2022],
                   "Month":[1,3,5],
                   "Day":["10","12","28"]
                  })
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre>

Year

Month

Day

0

2022

1

10

1

2021

3

12

2

2022

5

28

代码语言:javascript
复制
df.dtypes
代码语言:javascript
复制
Year      int64
Month     int64
Day      object
dtype: object

直接拼接会报错:字符串和数值型不能直接相加。

代码语言:javascript
复制
# df["Date"] = df["Year"] + df["Month"] + df["Day"]
代码语言:javascript
复制
df["Date"] = pd.to_datetime(df)
df

.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre>

Year

Month

Day

Date

0

2022

1

10

2022-01-10

1

2021

3

12

2021-03-12

2

2022

5

28

2022-05-28

代码语言:javascript
复制
df.dtypes
代码语言:javascript
复制
Year              int64
Month             int64
Day              object
Date     datetime64[ns]
dtype: object
代码语言:javascript
复制
pd.to_datetime("10/2/21")  # 默认
代码语言:javascript
复制
Timestamp('2021-10-02 00:00:00')
代码语言:javascript
复制
pd.to_datetime("10-2-21")  # 默认
代码语言:javascript
复制
Timestamp('2021-10-02 00:00:00')
代码语言:javascript
复制
pd.to_datetime("10/2/21",dayfirst=True)
代码语言:javascript
复制
Timestamp('2021-02-10 00:00:00')
代码语言:javascript
复制
pd.to_datetime("10/2/21",yearfirst=True)
代码语言:javascript
复制
Timestamp('2010-02-21 00:00:00')
代码语言:javascript
复制
pd.to_datetime("22-01-21",dayfirst=True)
代码语言:javascript
复制
Timestamp('2021-01-22 00:00:00')
代码语言:javascript
复制
pd.to_datetime("22-01-21",yearfirst=True)
代码语言:javascript
复制
Timestamp('2022-01-21 00:00:00')
代码语言:javascript
复制
pd.to_datetime('20220107', format='%Y%m%d', errors='ignore')
代码语言:javascript
复制
Timestamp('2022-01-07 00:00:00')
代码语言:javascript
复制
pd.to_datetime('20220107112347', errors='ignore')
代码语言:javascript
复制
Timestamp('2022-01-07 11:23:47')
代码语言:javascript
复制
pd.to_datetime('20220107112233', format='%Y%m%d%H%M%S')
代码语言:javascript
复制
Timestamp('2022-01-07 11:22:33')

select_dtypes

筛选指定类型下的数据信息

代码语言:javascript
复制
df.dtypes
代码语言:javascript
复制
Year              int64
Month             int64
Day              object
Date     datetime64[ns]
dtype: object
代码语言:javascript
复制
df.select_dtypes(include=["int"])

.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre>

Year

Month

0

2022

1

1

2021

3

2

2022

5

代码语言:javascript
复制
df.select_dtypes(include=["object"])

.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre>

Day

0

10

1

12

2

28

代码语言:javascript
复制
df.select_dtypes(include=["O"])  # 效果同上

.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre>

Day

0

10

1

12

2

28

代码语言:javascript
复制
# 排除object字段类型

df.select_dtypes(exclude=["object"])

.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre>

Year

Month

Date

0

2022

1

2022-01-10

1

2021

3

2021-03-12

2

2022

5

2022-05-28

代码语言:javascript
复制
# 排除object + int字段类型

df.select_dtypes(exclude=["object","int"])

.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre>

Date

0

2022-01-10

1

2021-03-12

2

2022-05-28

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-8-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pandas数据类型操作
  • Pandas字段类型
  • to_numeric()
    • 案例:假“数值型”
      • 案例2:数值+字符串
        • 案例3-数值型
        • astype
        • to_datetime()
        • select_dtypes
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com