pandas批量拆分與合并Excel文件的實現(xiàn)示例
一、Pandas 進行索引和切片的iloc、loc方法
iloc是基于整數(shù)位置進行索引和切片的方法
它允許您使用整數(shù)來訪問 DataFrame 或 Series 中的特定行和列
import pandas as pd
# 創(chuàng)建示例 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# 使用 iloc 訪問特定行和列
value = df.iloc[0, 1] # 獲取第一行、第二列的值
row = df.iloc[1] # 獲取第二行的所有列
col = df.iloc[:, 2] # 獲取第三列的所有值
slice_df = df.iloc[1:3, 0:2] # 獲取第二行到第三行、第一列到第二列的切片
print(value) # 輸出: 4
print(row) # 輸出: A 2\nB 5\nC 8\nName: 1, dtype: int64
print(col) # 輸出: 0 7\n1 8\n2 9\nName: C, dtype: int64
print(slice_df)
# 輸出:
# A B
# 1 2 5
# 2 3 6
loc是基于標簽進行索引和切片的方法。
它允許您使用標簽來訪問 DataFrame 或 Series 中特定的行和列
import pandas as pd
# 創(chuàng)建示例 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}, index=['a', 'b', 'c'])
# 使用 loc 訪問特定行和列
value = df.loc['a', 'B'] # 獲取索引為 'a',列為 'B' 的值
row = df.loc['b'] # 獲取索引為 'b' 的所有列
col = df.loc[:, 'C'] # 獲取列標簽為 'C' 的所有值
slice_df = df.loc['b':'c', 'A':'B'] # 獲取索引為 'b' 到 'c',列標簽為 'A' 到 'B' 的切片
print(value) # 輸出: 4
print(row) # 輸出: A 2\nB 5\nC 8\ndtype: int64
print(col) # 輸出: a 7\nb 8\nc 9\nName: C, dtype: int64
print(slice_df)
# 輸出:
# A B
# b 2 5
# c 3 6
二、Pandas批量拆分與合并Excel文件
將一個大Excel等分,拆成多個Excel
將多個小Excel合并并標記來源
import pandas as pd df_path = '/Users/python/Desktop/means/ml-25m/ratings.csv' df_source = pd.read_csv(df_path) df_source.head() userId movieId rating timestamp 0 1 296 5.0 1147880044 1 1 306 3.5 1147868817 2 1 307 5.0 1147868828 3 1 665 5.0 1147878820 4 1 899 3.5 1147868510
df.index 查看索引信息 總共行數(shù)1000209 RangeIndex(start=0, stop=1000209, step=1)
df.shape 查看總的行列信息 總共1000209行 4列 (1000209, 4) 獲取總的行數(shù)信息 total_row_count = df.shape[0] total_row_count 1000209
二、 將一個大的Excel 等分拆成多個Excel
計算拆分后每個excel的行數(shù) (可能除不盡 取余 + 1)
user_names = ["zhangsan", "lisi", "wanger", 'mazi']
split_size = total_row_count // len(user_names)
if total_row_count % len(user_names) != 0:
split_size += 1
拆分多個dataframe
for idx, user_name in enumerate(user_names):
begin = idx * split_size
end = (idx + 1 ) * split_size
df_sub = df_source.iloc[begin:end]
df_subs.append((idx, user_name, df_sub))
將多個datafame 寫入csv
for idx, user_name, df_sub in df_subs:
file_name = f'/Users/python/Desktop/means/ml-25m/ratings_{user_name}.csv'
df_sub.to_csv(file_name, index=False)
三、 將多個Excel合并成一個大的Excel
1. 便利文件夾,得到要合并的Excel 文件列表 2. 分別去讀到dataframe, 給每個df添加一列用于標記來源 3. 使用pd.concat 進行批量合并 4. 將合并到的dataframe 輸入到excel
讀取要合并的excel,并添加username 列
df_list = []
fnames = ['ratings_mazi.csv', 'ratings_zhangsan.csv', 'ratings_lisi.csv','ratings_wanger.csv','ratings_mazi.csv']
for fname in fnames:
file_name = f'/Users/python/Desktop/means/ml-25m/{fname}'
df_split = pd.read_csv(file_name)
username = fname.replace("ratings_", '').replace(".csv", '')
df_split['username'] = username
df_list.append(df_split)
使用pd.concat 進行合并 df_merged = pd.concat(df_list) df_merged.shape 查看總的行列信息 總共1000209行 4列 df_merged.head() 查看合并后的前幾行信息 userId movieId rating timestamp username 0 5109 508 3.0 840577637 mazi 1 5109 519 2.0 840577227 mazi 2 5109 524 2.0 840577346 mazi 3 5109 527 3.0 840576285 mazi 4 5109 529 3.0 840576680 mazi df_merged['username'].value_counts() 查看username 的取值種類 username mazi 500106 zhangsan 250053 lisi 250053 wanger 250053 Name: count, dtype: int64
將合并后的dataframe輸入到excel中
df_merged.to_csv('/Users/python/Desktop/means/ml-25m/ratings_merged.csv', index=False)
到此這篇關(guān)于pandas批量拆分與合并Excel文件的文章就介紹到這了,更多相關(guān)pandas批量拆分與合并Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 多維List創(chuàng)建的問題小結(jié)
這篇文章主要介紹了Python 多維List創(chuàng)建的問題小結(jié),詳細的介紹了遇到的一個小問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
Python中生成一個指定長度的隨機字符串實現(xiàn)示例
這篇文章主要介紹了Python中生成一個指定長度的隨機字符串,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
在PyTorch中實現(xiàn)可解釋的神經(jīng)網(wǎng)絡(luò)模型的方法詳解
這篇文章主要為大家介紹在PyTorch如何中實現(xiàn)可解釋的神經(jīng)網(wǎng)絡(luò)模型,并為您提供使用簡單的 PyTorch 接口實現(xiàn)最先進的基于概念的模型的工具,需要的朋友可以參考下2023-06-06
深入探討Python中的內(nèi)置類屬性`__repr__`
在Python中,__repr__是一個特殊的內(nèi)置類屬性,用于定義類的字符串表示形式,本文將深入探討__repr__的作用、用法以及一些實際應(yīng)用場景,希望對大家有所幫助2023-12-12
請不要重復(fù)犯我在學(xué)習(xí)Python和Linux系統(tǒng)上的錯誤
本人已經(jīng)在運維行業(yè)工作了將近十年,我最早接觸Linux是在大二的樣子,那時候只追求易懂,所以就選擇了Ubuntu作為學(xué)習(xí)、使用的對象,它簡單、易用、好操作、界面絢麗,對于想接觸Linux的新手來說是非常不錯的2016-12-12

