pythonpandas无列名数据合并_pandas数据合并(一)

一、多级索引

1、Series多级索引示例:

data = pd.Series(np.random.randn(9),index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'],[1, 2, 3, 1, 3, 1, 2, 2, 3]])

a 1 -0.204708

2 0.478943

3 -0.519439

b 1 -0.555730

3 1.965781

c 1 1.393406

2 0.092908

d 2 0.281746

3 0.769023

2、将两级索引转换为一级索引形式的DataFrame

data.unstack()

3、将一个二维表格转换为高级索引Series

obj.stack()

4、DataFrame多级索引示例

frame = pd.DataFrame(np.arange(12).reshape((4, 3)),index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],columns=[['Ohio', 'Ohio', 'Colorado'],['Green', 'Red', 'Green']])

5、给索引添加名称

frame.index.names = ['key1', 'key2']  #一级行索引名称为key1,二级行索引名称为key2

frame.columns.names=['state', 'color']  #一级列索引名称为state,二级列索引名称为color

6、索引互换位置

frame.swaplevel(i=-2, j=-1, axis=0)

#适用于两级索引的位置互换,i和j可以传入int,或者String(索引名称),axis=0:代表行索引互换,axis=1代表列索引位置互换

7、索引排序

frame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, by=None)

axis:对行索引还是列索引进行排序

level:对第几级别索引进行排序

ascending:升序还是降序

inplace:view还是inplace

8、将列索引设置为行索引

frame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)

keys:列标签或列标签列表

drop:删除已经作为行标签的keys对应的列

append:是否将keys添加到现有的index后面

9、将多级行索引变为列索引

frame.reset_index()

二、数据表合并

1.merge

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False)

left:左边表格

right:右边表格

how:inner:取交集,outer:并集;left:参照左边表格行,right:参照右边表格行

on:当left和right有相同的列名时,默认按照相同的列名进行合并,可以指定一个列表,当表格中有两个以上相同的列名时。

left_on和right_on:分别指定左边表格参照列和右边表格参照列,适用于参照列名称不一致的情况。可以为列表,对应的对方表格中也必须是列表或多级索引。

suffixes:是否添加后缀,如果left和right有相同的列名时添加后缀

left_index和right_index:当使用列名匹配索引时使用。是left_on和right_on的特殊情况。

2.join

left.join(right, on=None, how='left', lsuffix='', rsuffix='', sort=False)

join是merge的一种特殊形式.所有功能可以用merge来实现。

#默认left和right 以相同的索引连接

#on:可以指定相同的列名或列名组成的元祖或列表

#how:同merge

#lsuffix和rsuffix代表相同列名添加的后缀

3.concatnate连接

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)

功能:沿着设定的轴线连接两个表格

objs:需要连接的对象序列,用列表标示

axis:沿着index或者columns

join:outer,inner

join_axes:指定连接的索引列表,形式为[[  ]],用于代替join的inner或者outer

keys:通常为一个列表,构造一个高级索引,keys作为指定obj的高级索引,通常和objs个数一致。

names:指定高级索引对应的名称

ignore_index:是否忽略索引,默认为Fasle,合并过程中各自保留原来的索引值,True:使用新的索引从0到n-1

4、重叠数据的合并

where(condition, [x, y]):例:np.where(pd.isnull(a),a,b)

condition:arraylike,bool;

x,y:arraylike,与condition长度一致,如果为真返回x,否则y,

obj1.combine_first(obj2):如果obj1对应位置有数据(不为nan)使用obj1的数据,否则使用obj2的数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: import pandas as pd# Read in data df1 = pd.read_csv('data1.csv') df2 = pd.read_csv('data2.csv')# Merge data df_merged = df1.merge(df2, how='left', on='id')# Clean data df_merged.fillna(0, inplace=True) ### 回答2: import pandas as pd # 读取两个数据文件 df1 = pd.read_csv('data1.csv') df2 = pd.read_csv('data2.csv') # 合并两个数据集 df = pd.concat([df1, df2]) # 清洗数据 # 删除重复行 df = df.drop_duplicates() # 删除缺失值 df = df.dropna() # 重设索引 df = df.reset_index(drop=True) # 修改名 df = df.rename(columns={'old_col1': 'new_col1', 'old_col2': 'new_col2'}) # 修改数据类型 df['new_col1'] = df['new_col1'].astype(int) df['new_col2'] = df['new_col2'].astype(float) # 提取新的一,并根据条件重新赋值 df['new_col3'] = df['new_col1'].apply(lambda x: 'A' if x > 5 else 'B') # 根据多个的条件筛选数据 df = df[(df['new_col1'] > 3) & (df['new_col2'] < 10)] # 进行统计计算 mean_val = df['new_col2'].mean() max_val = df['new_col2'].max() # 输出处理结果 print(df) print('Mean value:', mean_val) print('Max value:', max_val) ### 回答3: import pandas as pd # 读取两个文件的数据 data1 = pd.read_csv('file1.csv') data2 = pd.read_csv('file2.csv') # 合并数据 merged_data = pd.concat([data1, data2]) # 去除重复行 cleaned_data = merged_data.drop_duplicates() # 处理缺失值 cleaned_data.fillna(0, inplace=True) # 重置索引 cleaned_data.reset_index(drop=True, inplace=True) # 保存清洗后的数据 cleaned_data.to_csv('cleaned_data.csv', index=False)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值