改Pandas中列的数据类型的几种方法

改Pandas中列的数据类型的几种方法

pandas中常见的数据类型

pandas python type nummpy type usage
object str string_,unicode_ Text
int64 int int_,int8,int16,int32,int64,uint8.uint16,uint32,uint64 integer number
float64 float float_,float16,float32,float64 floating point number
bool bool bool_ True/False values
datetime64[ns] NA datetime64[ns] date and time values
timedalta[ns] NA NA difference between two datetimes
category NA NA finite list of text values

1.to_numeric()/to_datetime

#pd.to_datetime
#pd.to_datetime用于处理成组日期,不管这些日期是DataFrame的轴索引还是列,to_datetime方法可以解析多种不同的日期表示形式
#例如:
df['date_formatted']=pd.to_datetime(df['date'],format='%Y-%m-%d')

#是可以通过apply()方法进行多列的操作
df[["HepB_1", "HepB_2","HepB_3"]] = df[["HepB_1", "HepB_2","HepB_3"]].apply(pd.to_datetime)#apply方法类似于函数中的filter,即将df[["HepB_1", "HepB_2","HepB_3"]]分别执行pd.to_datetime
可以在pd.to_datetime中设置参数errors='coerce'/'ignore'来对特殊值即空值进行处理

2.astype()

#astype可以使用NumPydtype、np.int16,一些Python类型(例如bool),或pandas特有的类型(比如分类dtype)

import pandas as pd
 #参数解释
copy——>True|False——>可选。 默认为 True。指定是返回副本(True),还是在原始 DataFrame 中进行更改(False)。
errors ——>'raise'|'ignore'——>可选。默认的 raise 。指定是忽略错误还是在出现错误时引发异常。
#downcast='unsigned'

# sample dataframe
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': ['a', 'b', 'c', 'd', 'e'],
    'C': [1.1, '1.0', '1.3', 2, 5]})
 
# converting all columns to string type
df = df.astype(str) #此时是改变整个数据框的类型
print(df.dtypes)

typedf = df.astype({"a": int, "b": complex})#转换某几列

#由于astype()是强制转换,但有时它会“不正确地”转换价值观
s = pd.Series([11, 22, -7])#这些是小整数,那么转换为无符号8位类型
s.astype(np.uint8)
#输出结果
"""
11
22
249
"""
#此时可以利用pd.to_numericdowncast='unsigned'参数,防止此错误
pd.to_numeric(s, downcast='unsigned')

3. infer_objects()

#在pandas中infer_objects()用于将具有对象数据类型的DataFrame列转换为更特定的类型(软转换)/(为输入对象列推断更好的数据类型)
df = pd.DataFrame({'a': [7, 1, 5], 'b': ['3','2','1']}, dtype = 'object')
df = df.infer_objects()
df.dtypes
#输出结果
"""
a     int64
b    object
dtype: object
"""
#列‘b’被单独保留,因为它的值是字符串,而不是整数
posted @ 2023-03-01 14:17  小杨的冥想课  阅读(1193)  评论(0编辑  收藏  举报