改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’被单独保留,因为它的值是字符串,而不是整数
标签:df,数据类型,astype,datetime,中列,HepB,pd,Pandas
From: https://www.cnblogs.com/yangzilaing/p/17168017.html