Python pandas 数据处理常用语法

  • 数据读取时出现分隔错误的处理(对应GIS属性表时:斟酌选择分隔符,如分号就比逗号好,然后读取时忽略错误行)
data = pd.read_csv(file,sep='', encoding='utf_8_sig',error_bad_lines=False)
  • 判断表格某单元是否为空(==不行,要用is)
data['供电局'] = data.apply(lambda x: x['供电局_y'] if (x['供电局_x'] is None) else x['供电局_x'],axis=1)
  • 删除某列包含特定字符的行
data1 = data1.drop(data1[data1['户名'].str.contains('车库|电梯|充电桩|地下|商铺|公寓|公司|储藏|公寓|公共|楼道|备用|配套公建',na=False)].index)
  • 处理日期数据
data['合同签订日期'] = pd.to_datetime(data['合同签订日期'])
  • 获取年份
data.loc[:,'签约年份'] = data.loc[:,'签约日期'].apply(lambda x: x.year).astype(int)
  • 将数据分段
默认right为真,即左开右闭;为假,则左闭右开
data.loc[:,'分类'] = pd.cut(data['未开工时间'],bins=[0,1,3,12],labels=['1年未开工','1-3年未开工','3年以上未开工'])
  • 截取特定位置的字符
不清楚原理,但是当使用data.loc[:,'合同签订年份']时,会报错,采用下面的语法则不会。
data['合同签订年份'] = data['合同编号'].apply(lambda x: x[7:11]).astype(int)
  • 移除字符串前后特定字符
data.loc[:,'证件号'] = data.loc[:, '证件号'].apply(lambda x: x.strip())
  • 删除为空的行
data = data.dropna(subset=['合同总价'])
  • 根据某列数据修改其他某列数据
data['居住地省份'] = data.apply(lambda row: '本市' if (row['居住地省份'] == '广东') and (row['居住地城市'] in ['湛江','廉江','遂溪','吴川','赤坎','坡头','霞山','麻章','雷州','徐闻','经济']) else row['居住地省份'], axis=1)
  • 将数据分组和重新整理
mjfd = data.groupby(['所属区县','签约年份'])['面积分段'].count()
# 数据格式需要强制转化,series 转 dataframe
mjfd = mjfd.loc[:,:].to_frame()
mjfd = pd.pivot_table(mjfd,index=['所属区县','面积分段'], columns='签约年份')
  • 数据分组时按照特定顺序排列
pailie = ['市区','廉江市','雷州市','遂溪县','吴川市','徐闻县']
category_fq = pd.api.types.CategoricalDtype(categories=pailie, ordered=True)
data['分区'] = data['分区'].astype(category_fq)
  • 匹配保留数字匹配项
data['购房者出生年份'] = data['购房者出生年份'].apply(lambda x: re.sub(r'[^0-9]', '', x))
  • 筛选出特定长度字符数据
data = data[data['购房者出生年份'].str.len()==4]
  •  对多列求和
data['col3']=data[['col1','col2']].sum(axis=1)
# 对第1列至第3列求和
data['sum'] = data.iloc[:,0:3].sum(axis=1)

 

posted on 2022-07-16 22:50  xiao40404  阅读(134)  评论(0编辑  收藏  举报