A. python--pandas合并与连接
append 方法根据行在原数据框添加新的数据框。
如果想要合并后的数据框索引重写排序,可以设置参数 ignore_index=True 。
concat 函数是panda自带的,可以按行或按列合并多个pandas数据框。
按行合并多个数据框,需要注意的是 objs参数接受一个可迭代对象 。concat函数默认按行合并。
设置 ignore_index=True ,使合并后的数据框索引重新排序。
按行合并时,concat对所有的列进行全连接(参数 join='outer' ),没有的列会填充为NaN。
设置参数 join='inner' ,可以只保留共有的列。
设置参数 axis=1 或 axis='columns' ,可以按列合并多个数据框。
merge 方法根据列或索引连接数据框。
当两个数据框只有一个相同列时, merge 方法会自动根据相同列进行内连接, on 参数可以省略。
设置参数 how=['left','right','outer','inner','cross'] ,可以完成不同类型的连接。
当两个数据框没有相同列时,需要设置 left_on 和 right_on 参数,表示按这两列进行连接。
如果需要根据数据框的索引进行连接,需要根据需求设置参数 left_index=True 或者 right_index=True 。
设置 suffixes ,可以给相同的列名添加后缀。默认后缀是 _x , _y 。
join 方法与 merge 方法作用相同,基本上 merge 方法已经可以完成所有的连接操作。
join 方法对按索引连接更方便而已。
当连接的两个数据框中没有相同列时,可以直接按索引进行左连接。
同样,可以设置 how 参数,控制连接的行为。
当数据框中有相同列时,需要设置后缀。
B. Python数据分析笔记#8.2.2 索引上的合并
“目录”
数据规整:聚合、合并和重塑
Data Wrangling: Join, Combine, and Reshape
--------> 数据库风格的DataFrame合并
--------> 索引上的合并
上一篇笔记讲的是如何根据DataFrame的列名来链接两个DataFrame对象。
有时候我们要根据DataFrame中的index索引来合并数据。这种情况下,我们可以传入 left_index=True或right_index=True 或两个都传入来说明索引被用作链接键。
我们先创建两个DataFrame,指明根据第一个DataFrame的'key'列和第二个DataFrame的index索引来合并数据:
默认的merge方法是求取链接键的交集,通过传入how='outer'可以得到它们的并集:
层次化索引数据的合并
对于层次化索引的数据的合并,我们要以 列表的形式指明用作合并键的多个列 。
比如下面我们就指定根据第一个DataFrame的'key1'列和'key2'列以及第二个DataFrame的index索引来合并:
同时使用双方的索引来合并也没问题:
join方法
DataFrame还有便捷的实例方法join,它能更方便的实现按索引合并,但要求没有重叠的列。
我们还可以向join传入一组DataFrame,类似于concat函数,实现多个DataFrame的合并拼接:
-END-
C. python列表中字典按指定相同的键值对合并到一个列表中
使用集合去重 + local动态变量设置 + exec 字符串解析 可实现,话不多说,代码在下面,格式有问题调整下空格:
list_msg = [{'date':'2019-08-17', 'type':'旅游', 'over_im':'12365'},
{'date':'2019-08-17', 'type':'haha', 'over_im':'12365'},
{'date':'2019-08-18', 'type':'娱乐', 'over_im':'11234'},{'date':'2019-08-19', 'type':'生活', 'over_im':'9532'},]
# 去除字典重复的data ,获取数据包含多少天内容
set_mark = {i['date'] for i in list_msg}
# 去除非法命名字符作为列表后缀:
ver_name = [i.replace('-','_') for i in set_mark]
# 给列表排序,确保按照顺序输出变量
ver_name.sort()
# 设置动态命名模板
list_name_template = 'list_data_'
# 创建local对象,准备创建动态变量
createver = locals()
# 循环遍历数据并创建动态列表变量接收
for mark in set_mark:
# 动态创建变量
createver[list_name_template + mark.replace('-','_')] \
= [dict_current for dict_current in list_msg if dict_current['date'] == mark]
for name in ver_name:
print(list_name_template + name + ':' ,end='\t') # 打印自动创建的变量名称,采用tab分隔
exec('print('+list_name_template + name +')') # 打印变量内容(列表)
'''
打印结果
list_data_2019_08_17: [{'date': '2019-08-17', 'type': '旅游', 'over_im': '12365'}, {'date': '2019-08-17', 'type': 'haha', 'over_im': '12365'}]
list_data_2019_08_18: [{'date': '2019-08-18', 'type': '娱乐', 'over_im': '11234'}]
list_data_2019_08_19: [{'date': '2019-08-19', 'type': '生活', 'over_im': '9532'}]
'''
D. Python如何将多行数据合并成一行
1、新建一个将两个列表组合成一个列表。
注意事项:
Python@用做函数的修饰符,可以在模块或者类的定义层内对函数进行修饰,出现在函数定义的前一行回,不允许和函数定义在同一行。
一个修饰符就是一个函数,它将被修饰的函数作为参数,并返回修饰后的同名函数或其他可调用的东西。
在Python的函数中偶尔会看到函数定义的上一行有@functionName的修饰,当解释器读到@这样的修饰符的答时候会优先解除@后的内容,直接就把@的下一行的函数或者类作为@后边函数的参数,然后将返回值赋给下一个修饰的函数对象。
E. 用Python实现合并两个排序的列表,但一直报错,请问怎么修改啊
你所定义的listnodeclass和python自带的listtype是不同的东西,不能通用,必须先转换
其他小错我直接帮你改掉了
下面是改好可以运行的代码:
classListNode(object):
def__init__(self,val):
self.val=val
self.next=None
def__repr__(self):
returnstr(self.val)
defLinkedList(pythonlist):
l=ListNode(pythonlist[0])
c=l
foriinrange(1,len(pythonlist)):
l.next=ListNode(pythonlist[i])
l=l.next
returnc
defPythonList(ListNode):
l=[]
whileListNode!=None:
l.append(ListNode.val)
ListNode=ListNode.next
returnl
classSolution(object):
defmergeTwoLists(self,l1,l2):
ifl1isNone:
returnl2
ifl2isNone:
returnl1
mmyhead=ListNode(0)
mmyhead.next=None
p=mmyhead
:
ifl1.val<l2.val:
p.next=l1
l1=l1.next
else:
p.next=l2
l2=l2.next
p=p.next
ifl1isnotNone:
p.next=l1
else:
p.next=l2
returnmmyhead.next
l1=LinkedList([1,3,5,7])
l2=LinkedList([2,4,6,8])
sol=Solution()
print(PythonList(sol.mergeTwoLists(l1,l2)))
(LinkedList(pythonlist)方法把一个传统的pythonlist转换成你用的首位相衔的listnode形式,PythonList(ListNode)则是转换回来)
同时,linkedlist的数据类型在c里面比较常用,python里面一般用不着这么麻烦
希望对你有帮助
F. 有八个文件夹里面放着相同名字的文件,如何用python把文件夹里同名称的数据合
需要大量代码,代码可从网络等浏览器中搜索到。
利用python把不同文件夹下相同名字的文件合并到一个文件并写入到新的文件夹,而不同名字的文件直接写入到新文件夹。
Python编程指的是一种跨平台的计算机程序设计语言,是ABC语言的替代品。Python能提供高效的高级数据结构,还能简单有效地面向对象编程,是一种面向对象的动态。
G. 使用Python合并多个有密码的EXCEL表格时,密码已知,该怎么改进一下代码实现合并
【第一个问题】
如果打开文件下多个文件(不包含子目录):
import glob
for filename in glob.glob(r"f:/py/*.py"):
file = msoffcrypto.OfficeFile(open(filename, "rb"))
……
【第二个问题】
第二个问题提示'df0'没有声明,建议参考下concat用法
concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False, =True):
pd.concat()只是单纯地把两个表拼接在一起,参数axis用于指定是行还是列,axis默认是0。当axis=0时,pd.concat([obj1, obj2])的效果与obj1.append(obj2)是相同的;当axis=1时,pd.concat([obj1, obj2], axis=1)的效果与pd.merge(obj1, obj2, left_index=True, right_index=True, how=‘outer’)是相同的。objs:需要连接的对象集合,一般是列表或字典;axis:连接轴向;join:参数为‘outer’或‘inner’;join_axes=[]:指定自定义的索引; keys=[]:创建层次化索引;ignore_index=True:重建索引
df = pd.read_excel(decrypted)
print(df)
data = pd.concat([df0, df1, ...], axis=0)
从你给的代码中看不出上面黑体标注的变量有些什么样的关系……
H. 如何用Python比较两个列表,并进行合并
list1=[('a',1),('b',5),('c',3)]
list2=[('a',2),('b',2)]
hash={}
fori,kinlist1+list2:
ifinotinhash:
hash[i]=k
elifk>=hash[i]:
hash[i]=k
list3=hash.items()
print(list3)
这样吗随便写的