Python 数据转换融合

1 数据合并

  • 轴向连接 pd.concat()
  1. 沿纵向轴合并:axis=0
  2. 沿横向轴合并:axis=1
frames = [df1, df2]
pd.concat(frames) #上下连接
#pd.concat(frames, axis=1) 左右连接
pd.concat(frames, axis=1, keys=['df1', 'df2']) # 层次化索引
pd.concat(frames, axis=1, join='inner') # 0轴索引取交集
pd.concat(frames, axis=1, join_axes=[df1.index]) #只用原始索引
常用的参数
  • 通过join_axes指定其他州的索引,不进行交并运算。

2 数据融合技术

2.1 使用pd.merge()


  • 默认将重合列作为键,也可以通过参数on指定。
  • 通过参数how指定融合方式(left,right,inner,outer)
  • 融合指标变量indicator,默认为False,如果设为True,则增加_merge(取值为left_only,right_only,both)。可以设为一个字符串表示列名。
  • 指定左键和右键:left_on,right_on
  • 融合后相同名称列默认会产生后缀,可以使用suffixes来利用原列名及后缀产生新的列名。
  • 索引-列合并
pd.merge(left, right, left_index= True, right_on='...', how='outer')

2.2 使用join融合

left.join(right, how='outer')

join默认融合方法how='left'

  • 索引-列融合
#这两个方法是等价的
left.join(right, on=key_or_keys)
pd.merge(left, right, left_on=key_or_keys, right_index=True,how='left', sort=False)

2.3 combine_first 缺失值填补

-用df1的值来填补df2

df2.combine_first(df1)

3 排序和随机采样

df.sort_values('loan_amnt')
df.sort_index()
  • 默认ascending=True,若改为False则为降序。
  • 如果不是顺序或降序,想要重排:
  1. 先通过np.random.permutation产生重排后的数组
  2. 再用.iloc或take函数
sampler = np.random.permutation(10)
df.take(sampler)
df.take(np.random.permutation(3)) # 0,1,2的重排
df.sample(3) #任意三个

4 离散化及面元划分

  • cut()和qcut()函数
  • cut():等距离散化
bins = [0, 10000, 20000, 30000, 40000]
pd.cut(df['loan_amnt'], bins)
#添加标签
labels = ['A', 'B', 'C', 'D']
pd.cut(df['loan_amnt'], bins=bins, labels=labels)
  • qcut():等频离散化
cats = pd.qcut(df['loan_amnt’], 5)
cats.value_counts()

实际每个区间的数量并不一定是理想中的等量

5 数据转换

  • map()函数
df['loan_status'].map(str.title) # 产生了一个新的Series对象
df['loan_status'] = df['loan_status'].map(str.title) #替换原来的数据
# 利用字典
mapper = {‘Fully Paid’:0, 'Charged Off':1}
df['indicator'] = df['loan_status'].map(mapper)
  • 替换值使用replace()
df.replace('10+ years', 'high')
# 多个,用列表
df.replace(['10+ years', '4 years', '< 1 year'], [10, 4, 1])
#也可以用字典
mapper = {'10+ years':10, '4 years’:4, '< 1 year’:1}
df.replace(mapper) # 等价于map:df['emp_length'].map(mapper)
# 重命名索引
df.columns
df.columns.map(str.upper)
df.columns = df.columns.map(str.upper)
  • 哑变量编码get_dumies()
pd.get_dummies(df['home_ownership'])
dummies = pd.get_dummies(df['home_ownership'], prefix='home') #指定前缀
df[['loan_amnt','grade']].join(dummies)  # 和原数据合并
pd.get_dummies(df) #DF对象亦可
pd.get_dummies(df, columns=['home_ownership'])
pd.get_dummies(df, columns=['home_ownership'], drop_first=True) # 去掉第一个编码特征

6 文本数据规整

s.str.lower()
df.columns.str.lower()
df.columns.str.lower().str.replace(' ', '_')
  • 分割元素
  1. 在str上使用索引
s = pd.Series(['name1 age1 sex1', 'name2 age2 sex2', 'name3 age3 sex3'])
s.str.split(" ").str[0]
  1. 使用str.get()
s.str.split(" ").str.get(0)
s.str.split(" ", expand=True) # 展开成DF
  1. 结合正则表达式
s.str.contains(r'\d')
s.str.replace(r'\d.', 'XX')
s.str.findall(r'\d.').str.get(0)
s.str.extract(r'(\d.)', expand=False)
s.str.get_dummies(sep=',')

(根据《Python数据分析基础》整理)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容