Python按行列合并列表、字典、数组

您所在的位置:网站首页 python数组合并成一个 Python按行列合并列表、字典、数组

Python按行列合并列表、字典、数组

2024-06-20 22:48| 来源: 网络整理| 查看: 265

Python 合并list,dict,数组 1.用字典将相同index的列放到同一列 # 将index相同的行放到同一列 from collections import defaultdict data = [['a', 1],['a', 3],['b',1],['b',2],['c',1],['c', 5]] dict_data = defaultdict(set) for line in data: if len(line) > 1: dict_data[line[0]].update(line[1:]) print(dict_data) #输出 out: defaultdict(, {'a': {1, 3}, 'b': {1, 2}, 'c': {1, 5}}) 2.函数返回多个值只取其中一个 #定义函数 def test(): a = 1 b = 2 c = 3 return a,b,c #取test函数的b b = test()[1] print("b = ",b) #结果 b = 2 3.python按行、列合并 3.1 python合并列表list

1.extend():向列表尾部追加一个列表

a = [1,2,3,4,5] b = ['A','B','C','D'] a.extend(b) print(a) #输出 [1,2,3,4,5,'A','B','C','D']

2.append():向列表尾部追加一个新元素,新元素只占一个索引位

a = [1,2,3,4,5] b = ['A','B','C','D'] a.append(b) print(b) #输出 [1,2,3,4,5,['A','B','C','D']]

3.a+b:看上去和extend()一样,但是生成了一个新的列表存两个列表的和

a = [1,2,3,4,5] b = ['A','B','C','D'] c = a+b print(c) #输出 [1,2,3,4,5,'A','B','C','D']

4.a+=b:效果和extend()一样,也是在原有列表上增加

a = [1,2,3,4,5] b = ['A','B','C','D'] c = a+b print(c) #输出 [1,2,3,4,5,'A','B','C','D']

5.切片,a[0:0]

a = [1,2,3,4,5] b = ['A','B','C','D'] a[0:0] = b print(a) #输出 ['A','B','C','D',1,2,3,4,5] a[1:0] = b #输出 print(a) [1,'A','B','C','D',2,3,4,5] 3.2python合并字典dict

相同key的value会被覆盖掉

1.dict(a,**b):b会覆盖a中key相同的value,结果是所有不同key的value, python 2 不支持,python3.5及以上支持

#适用于所有key值不同的dict a = {'age':17, 'name':'Mary', 'gender':'female'} b = {'age':19, 'name':'Joe','grade':90,'class':'Two'} c = dict(a, **b) print(c) #输出 {'age': 19, 'name': 'Joe', 'sex': 'female', 'grade': 90, 'class': 'Two'}

2.dict(a.items()+b.items()) ,python3不支持

#仅适用于python2 a = {'age':17, 'name':'Mary', 'gender':'female'} b = {'age':19, 'name':'Joe','grade':90,'class':'Two'} c = dict(a.items()+b.items()) print c #输出,b覆盖a中key相同的value {'grade': 90, 'gender': 'female', 'age': 19, 'name': 'Joe', 'class': 'Two'}

3.update()

a.update(b) print(a) #或者,不改变a c = {} c.update(a)#或者 c = a.copy() c.update(b) print(c) #输出 {'age': 19, 'name': 'Joe', 'gender': 'female', 'grade': 90, 'class': 'Two'}

4.字典的常规处理方法

for k, v in a.items(): c[k] = v for k, v in b.items(): c[k] = v print(c) #输出 {'age': 19, 'name': 'Joe', 'gender': 'female', 'grade': 90, 'class': 'Two'} 3.3python合并数组,numpy库 3.3.1 数组横向合并,按行

1.np.vstack()

import numpy as np a = [[1,2,3],[4,5,6]]#列表和数组类型都适用 b = [[7,8,9],[3,3,3]] c = np.vstack((a,b)) print(c) #输出,类型是数组型 array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [3, 3, 3]])

2.np.r_[ ]

c = np.r_[a,b] print(c) #输出,类型是数组型 array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [3, 3, 3]])

3.concatenate()

c = np.concatenate([a,b],axis = 0) print(c) #输出,类型是数组型 array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [3, 3, 3]]) 3.3.2数组纵向合并,按列

1.np.hstack()

c = np.hstack((a,b)) print(c) #输出,类型是数组型 array([[1, 2, 3, 7, 8, 9], [4, 5, 6, 3, 3, 3]])

2.np.c_[ ]

c = np.c_[a,b] print(c) #输出,类型是数组型 array([[1, 2, 3, 7, 8, 9], [4, 5, 6, 3, 3, 3]])

3.concatenate()

c = np.concatenate([a,b],axis = 1) print(c) #输出,类型是数组型 array([[1, 2, 3, 7, 8, 9], [4, 5, 6, 3, 3, 3]]) 3.4python合并数组,pandas库 3.4.1 merge函数 参数描述left参与合并的左侧DataFrameright参与合并的右侧DataFramehow连接方式:inner,默认;outer,left,righton连接的列名,和sql连接的on类似left_on左侧DF用作连接的键right_on右侧DF用作连接的键left_index将左侧的行索引用作其连接键right_on将右侧的行索引用作其连接键sort根据连接键对合并后的数据进行排序,默认True; 类似sql的order bysuffixes字符串值元组,用于追加重叠列名的末尾,重叠列名重命名copy设置False,可以在某些特殊情况下避免将数据复制到结果数据结构中 import pandas as pd import numpy as np df1 = pd.DataFrame({'key':['d','d','a','c'], 'data1':range(4)}) #out data1 key 0 0 d 1 1 d 2 2 a 3 3 c df2 = pd.DataFrame({'key':['a','b','c'], 'data2':range(3)}) #out data1 key 0 0 a 1 1 b 2 2 c

(1) 默认合并,key相同合并data

df3 = pd.merge(df1,df2)#等同于df1.merge(df2) #out data1 key data2 0 2 a 0 1 3 c 2

(2)内连接,取交集

df3 = df1.merge(df2,on = 'key', how = 'inner') #out data1 key data2 0 2 a 0 1 3 c 2

(3)外连接,取并集,并有NaN填充

df3 = df1.merge(df2, on = 'key', how = 'outer') #out data1 key data2 0 0.0 d NaN 1 1.0 d NaN 2 2.0 a 0.0 3 3.0 c 2.0 4 NaN b 1.0

(4)左连接,左侧DataFrame取全部,右侧DataFrame取部分

df3 = df1.merge(df2, on = 'key', how = 'left') #out data1 key data2 0 0 d NaN 1 1 d NaN 2 2 a 0.0 3 3 c 2.0

(5)右连接,右侧DataFrame取全部,左侧DataFrame取部分

df3 = df1.merge(df2, on = 'key', how = 'right') #out data1 key data2 0 2.0 a 0 1 3.0 c 2 2 NaN b 1

(6)如果左右侧DataFrame的连接键列名不一致,但是取值有重叠,可使用left_on、right_on来指定左右连接键

df3 = pd.DataFrame({'lkey':['b','b','a','c','a','a','b'],'data1': range(7)}) df4 = pd.DataFrame({'rkey':['a','b','d'],'data2':range(3)}) df3.merge(df4,left_on = 'lkey',right_on = 'rkey',how = 'inner') #out data1 lkey data2 rkey 0 0 b 1 b 1 1 b 1 b 2 6 b 1 b 3 2 a 0 a 4 4 a 0 a 5 5 a 0 a 3.4.2 索引合并

当连接键位于索引中时,成为索引上的合并,可以通过merge函数,传入left_index、right_index来说明应该被索引的情况

left1 = pd.DataFrame({'key':['a','b','a','a','b','c'],'value': range(6)}) right1 = pd.DataFrame({'group_val':[3.5,7]},index = ['a','b']) df = pd.merge(left1,right1,left_on = 'key',right_index = True) #out key value group_val 0 a 0 3.5 2 a 2 3.5 3 a 3 3.5 1 b 1 7.0 4 b 4 7.0 3.4.3 concat轴向连接 参数描述objs对象(列表或字典),对象的数据类型是pandas,不可为空axis连接的轴,0是纵轴(行),1是横轴(列)join合并的方式,inner,outer(默认)ignore不保留连接轴上的索引,产生一组新的索引 s1 = pd.Series([0,1,2],index = ['a','b','c']) s2 = pd.Series([2,3,4],index = ['c','f','e']) s3 = pd.Series([4,5,6],index = ['c','f','g'])

(1)默认情况,并集,纵向连接

s4 = pd.concat([s1, s2, s3]) #out a 0 b 1 c 2 c 2 f 3 e 4 c 4 f 5 g 6 dtype: int64 s4 = pd.concat([s1, s2, s3],ignore_index = True) #out 0 0 1 1 2 2 3 2 4 3 5 4 6 4 7 5 8 6 dtype: int64

(2)纵向取交集,注意该方法对对象表中有重复索引时失效

s4 = pd.concat([s1,s2,s3],axis = 1,join = 'inner') #out 0 1 2 c 2 2 4

(3)横向索引取并集,纵向索引取交集,注意该方法对对象表中有重复索引时失效

s4 = pd.concat([s1,s2,s3],axis = 1,join = 'outer') #out 0 1 2 a 0.0 NaN NaN b 1.0 NaN NaN c 2.0 2.0 4.0 e NaN 4.0 NaN f NaN 3.0 5.0 g NaN NaN 6.0 3.4.3 combine_first,重叠索引时填补缺失值

当两个对象的索引有部分或全部重叠时; 用参数对象中的数据为调用者对象的缺失数据‘打补丁’

a = pd.Series([np.nan,2.5,np.nan,3.5,4.5,np.nan],index = ['a','b','c','d','e','f']) #out a NaN b 2.5 c NaN d 3.5 e 4.5 f NaN dtype: float64 b = pd.Series(np.arange(len(a)),index = ['a','b','c','d','e','f']) #out a 0 b 1 c 2 d 3 e 4 f 5 #用b填补a的空白 a.combine_first(b) #a out a 0.0 b 2.5 c 2.0 d 3.5 e 4.5 f 5.0 4.pyhton 一个语句可以分成多行吗? 可以。如果有括号(小括号、中括号、大括号),敲回车键即可断行; 如果没有,需要在断开的地方加 \ 符号,表示这一行尚未结束 #例1.有括号 a = (alpha + beta + charlie) #例2.无括号 a = alpha + beta + \ charlie


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3