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)
這樣嗎隨便寫的