我已在Google colab中复制了34个具有相同列的CSV文件,并尝试将其合并为一个大数据框。但是,每个CSV都有一个重复的标头,需要跳过。
连接时会跳过实际的标题,因为我的CSV文件具有相同的列正确吗?
dfs = [pd.read_csv(path.join('/content/drive/My Drive/',x)skiprows=1) for x in os.listdir('/content/drive/My Drive/') if path.isfile(path.join('/content/drive/My Drive/',x))]
df = pd.concat(dfs)
上面的代码抛出错误。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe2 in position 1: invalid continuation byte
下面的代码适用于示例文件,但需要一种有效的方法来跳过dup标头并合并到一个数据框中。请提出建议。
df1=pd.read_csv("./Aug_0816.csv",skiprows=1)
df2=pd.read_csv("./Sep_0916.csv",skiprows=1)
df3=pd.read_csv("./Oct_1016.csv",skiprows=1)
df4=pd.read_csv("./Nov_1116.csv",skiprows=1)
df5=pd.read_csv("./Dec_1216.csv",skiprows=1)
dfs=[df1,df2,df3,df4,df5]
df=pd.concat(dfs)
答案 0 :(得分:0)
您是否考虑过使用标准库中的glob
?
尝试
path = ('/content/drive/My Drive/')
os.chdir(path)
allFiles = glob.glob("*.csv")
dfs = [pd.read_csv(f,header=None,error_bad_lines=False) for f in allFiles]
#or if you know the specific delimiter for your csv
#dfs = [pd.read_csv(f,header=None,delimiter='yourdelimiter') for f in allFiles]
df = pd.concat(dfs)
答案 1 :(得分:0)
试试这个,最通用的脚本,用于将特定路径中的多个 'n' csv 文件与通用文件名格式连接起来!
def get_merged_csv(flist, **kwargs):
return pd.concat([pd.read_csv(f,**kwargs) for f in flist], ignore_index=True)
path = r"C:\Users\Jyotsna\Documents"
fmask = os.path.join(path, 'Detail**.csv')
df = get_merged_csv(glob.glob(fmask), index_col=None)
df.head()
如果您想在连接之前跳过每个文件中的某些固定行和/或列,请在此行相应地编辑代码!
return pd.concat([pd.read_csv(f, skiprows=4,usecols=range(9),**kwargs) for f in flist], ignore_index=True)