pandas 常用方法使用示例

from pandas import DataFrame
import numpy as np
import pandas as pd

t={
    "age": [18, 30, np.nan, 40, np.nan, 30],
    "city": ["BeiJing", "ShangHai", "GuangZhou", "ShenZhen", 'BeiJing', "ShangHai"],
    "sex": [None, "male", "female", "male", np.nan, "unknown"],
    "birth": ["2000-02-10", "1988-10-17", None, "1978-08-08", np.nan, "1988-10-17"],
    "score":[11,7,33,44,22,33],
    "naem":['sdf','aa','bb','tt','ere','tt'],
    "name":['sdf 11','aa 22','bb 33','tt 44','ere 55','tt 66']
}

df =DataFrame(t)
cc=df.isnull().sum()  #每列none的个数
print(df[df.age.notnull()]) # isnull()
df.dropna() #删除none所在行
df1=df['score']
df1.index=['a','b','c','d','e','f'] # 为series定义新的索引
df1.name='aiyou'
print(df1[df1<22]) # 对 series 进行过滤
print(df1[['a','c']]) # 获取两个元素
print((df1[:3]))  # 对series切片
print((df1+2))   # series 给每个元素加2
print(df1.to_frame()) #series 变成 dataframe
print(df1['a']) # 可以将series当做dict使用,series的index就是dict的key
print(df.loc[[1,2],['age']])  # 查询指定的行和列
# 访问行用loc 或 iloc
print(df[(df.age>0)&(df.age<40)])
print(df[(df.age>0)&(df.age<40)][['age']])# 查询特定的行和列
print(df.count()) # 非空的个数
print(df.sum()) # 非空的个数
print(df.pop('naem'))  # 删除一列,返回值是删除的这列,原来的df发生了变化
print(df.drop('age',axis=1))# 删除一列,返回值是后的结果,原来的df没发生变化
print(df[['age','score']])
# print(s6+s7)  s6和s7是两个series,s6中不存在g索引,s7中不存在e索引,所以数据运算会产生两个缺失值NaN
clonedf=df.assign(age_add_one = df["age"] + 1) #在克隆df的同时再加上一列  如果想要保证原有的 DataFrame 不改变的话,我们可以通过 assign 方法来创建新的一列
print(clonedf)

df['age_code']= np.where(df["age"] >22, 1, 0)  # 根据某列的值,产生新的一列
df['age']=np.where(df['age']<df['score'],df['score'],df['age'])
print(type(df[['age']]))  # DataFram
print(type(df['age']))  # Series
print(df.shape)
print(df.head(2)) # 查看前两行数据
print(df.tail(2))
print(df['age'].value_counts()) # 获取某列中每个值出现的次数
print(df.sort_index(ascending=False)) # 按索引排序
print(df.sort_values(by=['age','age_code'])) #按值排序
print(df['age'].idxmax()) #获取最大值的索引
print(df['age'].idxmin()) # 获取最小值的索引
'''
map 是 Series 中特有的方法,通过它可以对 Series 中的每个元素实现转换
apply 方法既支持 Series,也支持 DataFrame,在对 Series 操作时会作用到每个值上,在对 DataFrame 操作时会作用到整行或整列(通过 axis 参数控制)。
applymap 方法针对于 DataFrame,它作用于 DataFrame 中的每个元素,它对 DataFrame 的效果类似于 apply 对 Series 的效果
'''
df['age'] = df['age'].combine_first(df['score']) # 利用另一列的值填补此列的None
print(df.rename(index={1: "tom", 3: "bob"})) #修改索引
print(df.rename(columns={"age": "Age", "city": "City", "sex": "Sex"})) #修改列名
print(df["age"].astype(float)) # 转换数据类型
print(pd.to_numeric(df.age, errors="ignore")) # errors='raise',这意味着强转失败后直接抛出异常,设置 errors='coerce' 可以在强转失败时将有问题的元素赋值为 pd.NaT(对于datetime和timedelta)或 np.nan(数字)。设置 errors='ignore' 可以在强转失败时返回原有的数据
print(df.age.nlargest(2))  # 获取最大的n个值或最小值的n个值,我们可以使用 nlargest 和 nsmallest 方法来完成,这比先进行排序,再使用 head(n) 方法快得多
df["birth"] = pd.to_datetime(df.birth)  # 把数据类型转成时间
print(df.city.str.upper()) # print(df.city.str.len())  user_info.city.str.replace(" ", "_") str 方法的使用
print(df.name.str.split(' ').str.get(1))  # 对字段进行分割
df[['name1','name2']]=df.name.str.split(' ', expand=True) # 根据一列生成两列
print(df[df.city.str.contains("Zh")]) # 是否包含某个关键字
print(df.dropna(axis=0, how="any", subset=["city", "sex"])) # thresh=3,会在一行/列中至少有 3 个非空值时将其保留。
df.age.fillna(0)
print(df.replace({"age": 40, "birth": pd.Timestamp("1978-08-08")}, np.nan)) # 将age列为40的替换成nan,将birth列为1978-08-08的替换成nan
print(df.city.replace(r'\s+', np.nan, regex=True))
 

猜你喜欢

转载自www.cnblogs.com/testzcy/p/12077820.html