背景:工作需要从大量CSV中读取列名,对出数据库字段的表名是什么意思
原材料:一堆CSV 是从oracle里导出来的
遇到的坑:dataframe合并,dataframe列名录入到新的dataframe中,dataframe合并后重新索引,非utf-8的CSV读取不了
格式:
id name XXX
X X XXX
import os
import pandas as pd
#import xlrd,xlwt
#from xlutils.copy import copy as xl_copy
def readcsv(dir_path):
df_comp = pd.DataFrame() # 存储合并txt数据
filelist = []
for file in os.listdir(dir_path):
if file.endswith('csv'):
filename = os.path.join(dir_path, file) # 路径拼接函数
df = pd.read_csv(filename, encoding = 'gb18030') #csv不是UTF-8编码
df_head = pd.DataFrame(df.columns)
filelist.append(file)
df_comp1 = pd.DataFrame(df_head)
df_comp = pd.concat([df_comp, df_comp1], axis=1)
####dataframe读完是一列一列的
df_comp = pd.DataFrame(df_comp.values.T, index=df_comp.columns, columns=df_comp.index)
df_comp = df_comp.reset_index(drop=True) ####dataframe重新索引,不然下面无法和文件列表列合并,出现错误
df_filename = pd.Series(filelist)
df_comp = pd.concat([df_filename,df_comp],axis =1)
print(df_comp)
return df_comp
def write_csv(filename,df_comp):
try:
df_comp.to_csv(filename)
except UnicodeEncodeError:
print("编码错误, 该数据无法写到文件中, 直接忽略该数据")
if __name__ == "__main__":
filename = '../concat.csv'
df_comp = readcsv('./') ##目录根据需要自己改
write_csv(filename,df_comp) ##没有写自动生成文件和校验
#想要的结果是这样的
0 0 1 2 3 4
0 1.csv id name NaN NaN NaN
1 2.csv id2 name NaN NaN NaN
2 3.csv NM XH MC SJGXSJ SJSCSJ
网友评论