如何跳过具有不规则列的多个CSV文件中的重复标题并合并为一个大数据框

时间:2019-05-08 12:56:33

标签: pandas

我已在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)

2 个答案:

答案 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)