![](/img/trans.png)
[英]Split xlsx file into other xlsx files based on first column with Python
[英]Read the text file and split into multiple files based unique code present in the first column
讀取文本文件,然后根據文本文件第一列中存在的唯一代碼將其拆分為多個文件-基於第一列中的唯一代碼標識符,每條記錄的列結構都會有所不同。
帶有逗號分隔符的文本文件
Sample input file structure
"05555", "AB", "CC", "DD", "EE", "USA"
"05555", "AB", "CC", "DD", "EE", "CA"
"05555", "AB", "CC", "DD", "EE", "NY"
"0666666", "AB", "CC", "DD", "EE", "NY", "123", "567", "888"
"0666666", "AB", "CC", "DD", "EE", "USA", "123", "567", "999"
我想根據第一列中的唯一代碼標識符將上述文本文件拆分為文本文件。
預期兩個文件的數據如下
File1
"05555", "AB", "CC", "DD", "EE", "USA"
"05555", "AB", "CC", "DD", "EE", "CA"
"05555", "AB", "CC", "DD", "EE", "NY"
file2
"0666666", "AB", "CC", "DD", "EE", "NY", "123", "567", "888"
"0666666", "AB", "CC", "DD", "EE", "USA", "123", "567", "999"
注意:由於每個代碼標識符的結構不同,因此我無法將數據讀取到pandas數據幀中
您的問題包括兩部分:首先讀取具有不平衡行的文件,然后將數據幀拆分為sub-dfs
import pandas, io
data = io.StringIO('''"05555", "AB", "CC", "DD", "EE", "USA"
"05555", "AB", "CC", "DD", "EE", "CA"
"05555", "AB", "CC", "DD", "EE", "NY"
"0666666", "AB", "CC", "DD", "EE", "NY", "123", "567", "888"
"0666666", "AB", "CC", "DD", "EE", "USA", "123", "567", "999"
''')
df = pd.read_csv(data,sep=';',header=None)
s=df[0].str.split(',',expand=True)
s=s.apply(lambda x : x.str.strip(' "'),1)
for x , y in s.groupby(0):
print(y.dropna(1))
y.dropna(1).to_csv(str(x)+'.csv')
0 1 2 3 4 5
0 05555 AB CC DD EE USA
1 05555 AB CC DD EE CA
2 05555 AB CC DD EE NY
0 1 2 3 4 5 6 7 8
3 0666666 AB CC DD EE NY 123 567 888
4 0666666 AB CC DD EE USA 123 567 999
嘗試使用groupby
和for
循環,然后編寫csv
:
for i, (_, group) in enumerate(df.groupby(df.iloc[:, 0]), 1):
group.to_csv('File%s' % i)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.