pandas常用语句速查(整理中...)

pandas常用语句速查

  • 映射函数
  • 数据探索
  • 集计操作
  • 缺失值列查找填充
    • 判断缺失值
    • 缺失值注意事项
  • 索引
    • Series索引
  • 重复值处理
  • 增删修改
  • 行列计算
  • dataframe
    • 加减乘除运算
    • 找出表中列的和最大最小值的索引
    • 每个元素减去每一行的平均值
    • 转置操作
    • 按列排序
    • 标签查询
    • 位置查询
    • 按关键字查询
    • 根据下标值进行更改
    • 多值替换
  • Series加减乘除运算
    • 列表数据列拆成多行的方法
    • 合并多个表
  • 分组操作
  • 透视表
  • 绝对型数据处理
  • 日期处理
  • sql 对比
  • 与csv对比
  • 与R对比

映射函数

  • map

review_points_mean = reviews.points.mean()
reviews.points.map(lambda p: p - review_points_mean)

  • apply 将函数应用于某一列

def remean_points(row):
row.points = row.points - review_points_mean
return row
reviews.apply(remean_points, axis=‘columns’)

  • , <, ==,+
    两列数据长度和类型相等时可用这些运算符;

数据探索

  • df.sample(nums)
    数据集中随机选取nums个。

集计操作

  • df.rolling() :用窗口内数的计算结果,取代每个数
  • df.resample(): 更改采样频率对数据进行再次计算,可为上采样或下采样

缺失值列查找填充

判断缺失值

  • isnull(): 查找为空(NaN)的数据
  • notnull():查找不为空的数据
  • df[‘Item_Weight’] = df.groupby([‘Item_Identifier’,‘Outlet_Identifier’])[‘Item_Weight’].ffill()
  • dfdata[‘所属校区’] =dfdata[‘所属校区’].replace(‘All’, ‘总计’)
    replace将列中‘all’值替换为‘总计’。
    有时候替换的值是str却输入的是数字,因为数据类型不对找不到要替换的值,所以会导致替换不成功
  • df[“列名”].isin([“值”])
    找到某列的特定值
  • thresh参数(脱粒)
    thresh参数表示这一行除去NA值,剩余数值的数量大于等于n,便显示这一行。

thresh=6,即剔除NA值,这些行剩余的数值数量大于等于6
df.dropna(thresh=6)

  • 缺失值填充

df.fillna(value=3)

  • 删除存在缺失值的行

df.dropna(how=“any”)

  • 缺失值拟合
df['number']=df['number'].interpolate().astype(int)

缺失值注意事项

np.nan导出到excel中是为空值,如df[df<0]可过滤所有列含的负值。

索引

  • loc
    loc索引时使用列名行标签如行标签是数字则可用数字来索引,这一点易错误。
    df.loc[32]表示索引第33行的数据。
  • iat
df.iat[1,1]=3 #第二行第二列值修改为3
  • 在生成新数据的时候直接进行索引重排,如reset_index()
    one=mpeak[mpeak[“Station ID”]==1108372].reset_index()
  • query
  • isin
  • between
    用于系列检查哪个值在第一个和第二个参数之间,返回布尔,可以用作条件过滤值。

Series.between(left, right, inclusive=True)

Series索引

对s的前3个数据进行访问:

s[:3]

重复值处理

https://www.jianshu.com/p/c033f89f4750

增删修改

  • insert()插入列

DataFrame.insert(loc, column, value, allow_duplicates=False)
Insert column into DataFrame at specified location.

  • append()添加行至末尾

DataFrame.append(self, other, ignore_index=False, verify_integrity=False, sort=False)
Append rows of other to the end of caller, returning a new object.

df.append(df.iloc[7]) #第八行输入添加至最后一行

如series纵向拼接:

s4 = s3.append(s1)  # 将s1拼接到s3后面

行列计算

  • apply
    apply函数易报错点是axis=1才是逐行计算。axis=0则是逐行计算。
    I52[‘Average Flow’]=I52.apply(lambda x:round(x[‘Total Flow’]/x[‘Lane’],0),axis=1)
  • diff
    数据移动后做差。DataFrame.diff(periods=1, axis=0),periods是移动的步数,axis是移动的方向。
  • shift
    数据延某个方向移动指定的步数。

dataframe

加减乘除运算

两个dataframe四则运算之后,除了匹配的行列名,其余行列的值都为空。
https://blog.csdn.net/dsfsdfasghyjykytkjgh/article/details/89003299?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

找出表中列的和最大最小值的索引

df = pd.DataFrame(np.random.random(size=(5, 10)), columns=list('abcdefghij'))
print(df)
df.sum().idxmin()  # idxmax(), idxmin() 为 Series 函数返回最大最小值的索引值

每个元素减去每一行的平均值

df.sub(df.mean(axis=1),axis=0) #df.mean(axis=1) 按列运算求平均,即每行的均值

转置操作

df.T

按列排序

df.sort_values(by=‘age’)
df.sort_values(by=[‘age’,‘score’],ascending=[False,True])

标签查询

  • 单列
df['name']
df.name
  • 多列
df[['name1','name2']]

位置查询

df.iloc[1:3] # 索引出第二行,第三行
df.iloc[0:2] #索引出第一行,第二行

按关键字查询

df[df['animal'].isin(['cat','dog'])]

根据下标值进行更改

df.iat[1,1]=2 # 第二行第二列数据改为2
df.iat[0,0]=3 # 第一行第一列数据改为3

多值替换

df['gender'].map({'yes':True,'no':False})

Series加减乘除运算

Series四则运算都是按照索引进行运算,如果索引不同则填充为空值NaN

s4.add(s3)
s4.sub(s3)
s4.mul(s3) #乘法
s4.div(s3) #除法

列表数据列拆成多行的方法

https://www.cjavapy.com/article/237/

合并多个表

  • reduce+merge实现
from functools import reduce
dfs = [df0, df1, df2, dfN]
df_final = reduce(lambda left,right: pd.merge(left,right,on=‘name’), dfs)
  • 拼接多个表
piece=[df1,df2,df3]
pd.concat(piece)

分组操作

  • groupwise操作

  • 分组求和

df.groupby('column_name').sum()
  • 每组中最大n个数之和
df = pd.DataFrame({'A': list('aaabbcaabcccbbc'),'B': [12, 345, 3, 1, 45, 14, 4, 52, 54, 23, 235, 21, 57, 3, 87]})
df.groupby('A')['B'].nlargest(n).sum(level=0)
  • 多列索引展开成数据透视表
df.unstack(level=0) #按第一级索引展开,level=-1则按最后一列索引展开

透视表

pd.pivot_table(df, values=['D'], index=['A', 'B'], aggfunc=[np.sum, len])
# 按D列聚合,以A、B为索引,聚合方式aggfunc指定

若关心 C 列对 D 列的影响,可以加入 columns 值进行分析。

pd.pivot_table(df,values=['D'],index=['A','B'],aggfunc=[np.sum,len],columns=['C'],fill_value=0)
# fill_value处理缺省值

绝对型数据处理

  • 绝对型数据定义
df = pd.DataFrame({"id": [1, 2, 3, 4, 5, 6], "raw_grade": [
                  'a', 'b', 'b', 'a', 'a', 'e']})
df["grade"] = df["raw_grade"].astype("category")
  • 绝对型数据重命名
df["grade"].cat.categories=["sehr gut","gut","Nicht gut"]
  • 改变标签集合
df["grade"]=df["grade"].cat.set_categories(["very bad","bad","medium","good","very good"])
  • 对绝对型数据排序
df.sort_valuesO(by="grade")
  • 对绝对型数据进行分组
df.groupby("grade").size()

日期处理

  • 时间计算
    https://www.jianshu.com/p/041872dea090
  • 建立时间序列索引
dindex = pd.date_range(start='2020-01-01',end='2020-09-01',freq='D')
s = pd.Series(np.random.rand(len(dindex)),index=dindex)
  • 统计每个周一对应值的和
s[s.index.weekday==0].sum() #周一对应的索引是0
  • 统计每个月值的平均值
s.resample('M').mean()
  • 时间转换
    如秒转分钟:
s=pd.date_range('today',periods=100,freq='s')
ts=pd.Series(np.random.randint(0,500),len(s),index=s)
ts.resample('Min').sum()
  • 时区定位(UTC 世界时间标准)
s = pd.date_range('today', periods=1, freq='D')  # 获取当前时间
ts = pd.Series(np.random.randn(len(s)), s)  # 随机数值
ts_utc = ts.tz_localize('UTC')  # 转换为 UTC 时间
s= pd.date_range('today',periods=1,freq='D')
  • 时区转换
ts_utc.tz_convert('Asia/Shanghai')

https://www.jianshu.com/p/96ea42c58abe

sql 对比

https://www.jianshu.com/p/14af48479078

与csv对比

  • excel读取
    pd.read_excel(‘animal.xlsx’, ‘Sheet1’, index_col=None, na_values=[‘NA’])

与R对比

你可能感兴趣的:(python,python,pandas,数据分析)