如何使用pandas pd.concat()保持表列的名称/格式?

2024-05-02 14:25:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的桌子

  08:20:00                           PLAYERS  MEMBRESIA  JUGADORES  CARRITOS  OBSERVACION
0   900523  camilo antonio aleman campagnani        NaN        NaN       NaN          NaN
1  900-561                  josé raúl alemán        NaN        NaN       NaN          NaN
2   900553    nicolas ardito barletta maduro        NaN        NaN       NaN          NaN
3      NaN                               NaN        NaN        NaN       NaN          NaN
   08:30:00                       PLAYERS  MEMBRESIA  JUGADORES  CARRITOS  OBSERVACION
0  107546.0        erasmo raúl arias boyd        NaN        NaN       NaN          NaN
1  103283.0            diego galindo lara        NaN        NaN       NaN          NaN
2  100930.0  luis carlos jaramillo pinzón        NaN        NaN       NaN          NaN
3       NaN                           NaN        NaN        NaN       NaN          NaN
   08:40:00                               PLAYERS  MEMBRESIA  JUGADORES  CARRITOS  OBSERVACION
0  102386-1             antonio dominguez alvarez        NaN        NaN       NaN          NaN
1  102386-2  antonio enrique dominguez de obaldia        NaN        NaN       NaN          NaN
2    102386    maria del carmen de obaldia ortega        NaN        NaN       NaN          NaN
3    501248                     josé luis alvarez        NaN        NaN       NaN          NaN

使用pd.concat()将表连接到一个数据帧后,它将删除单个列标题。 结果:

  08:20:00                           PLAYERS  MEMBRESIA  JUGADORES  CARRITOS  OBSERVACION
0   900523  camilo antonio aleman campagnani        NaN        NaN       NaN          NaN
1  900-561                  josé raúl alemán        NaN        NaN       NaN          NaN
2   900553    nicolas ardito barletta maduro        NaN        NaN       NaN          NaN
3      NaN                               NaN        NaN        NaN       NaN          NaN
0  107546.0        erasmo raúl arias boyd        NaN        NaN       NaN          NaN
1  103283.0            diego galindo lara        NaN        NaN       NaN          NaN
2  100930.0  luis carlos jaramillo pinzón        NaN        NaN       NaN          NaN
3       NaN                           NaN        NaN        NaN       NaN          NaN
0  102386-1             antonio dominguez alvarez        NaN        NaN       NaN          NaN
1  102386-2  antonio enrique dominguez de obaldia        NaN        NaN       NaN          NaN
2    102386    maria del carmen de obaldia ortega        NaN        NaN       NaN          NaN
3    501248                     josé luis alvarez        NaN        NaN       NaN          NaN

我想保留原来的格式。 我试图做的是读取HTML文档,将其传递给pandas read_HTML函数,并将其导出为excel

基本上,我想保留这种格式。我对熊猫还比较陌生


Tags: denanraplayersluisjosantoniodominguez
2条回答
  • 每个数据帧的第一列是不同的。似乎它是一个时间戳
  • 使用assign()将其复制到列中
  • rename()这样所有的数据帧都是一致的
data = ["""  08:20:00                           PLAYERS  MEMBRESIA  JUGADORES  CARRITOS  OBSERVACION
0   900523  camilo antonio aleman campagnani        NaN        NaN       NaN          NaN
1  900-561                  josé raúl alemán        NaN        NaN       NaN          NaN
2   900553    nicolas ardito barletta maduro        NaN        NaN       NaN          NaN
3      NaN                               NaN        NaN        NaN       NaN          NaN""",
"""   08:30:00                       PLAYERS  MEMBRESIA  JUGADORES  CARRITOS  OBSERVACION
0  107546.0        erasmo raúl arias boyd        NaN        NaN       NaN          NaN
1  103283.0            diego galindo lara        NaN        NaN       NaN          NaN
2  100930.0  luis carlos jaramillo pinzón        NaN        NaN       NaN          NaN
3       NaN                           NaN        NaN        NaN       NaN          NaN""",
"""   08:40:00                               PLAYERS  MEMBRESIA  JUGADORES  CARRITOS  OBSERVACION
0  102386-1             antonio dominguez alvarez        NaN        NaN       NaN          NaN
1  102386-2  antonio enrique dominguez de obaldia        NaN        NaN       NaN          NaN
2    102386    maria del carmen de obaldia ortega        NaN        NaN       NaN          NaN
3    501248                     josé luis alvarez        NaN        NaN       NaN          NaN"""]

dfs = {f"df{i}":pd.read_csv(io.StringIO(data),sep="\s\s+", engine="python") for i,data in enumerate(data)}

df = pd.concat([df.assign(TIMESTAMP=df.columns[0]).rename(columns={df.columns[0]:"PLAYERID"}) for df in dfs.values()])

输出

^{tb1}$

补充

列名需要作为行concat()将它们放回和concat()所有数据帧

# put the column back into rows and use generic column names...
pd.concat([pd.concat([pd.DataFrame(df.columns.values).T, 
                      df.rename(columns={c:i for i,c in enumerate(df.columns)})]) 
           for df in dfs.values()])


final = pd.concat([pd.concat([pd.DataFrame(df.columns.values).T, 
              df.rename(columns={c:i for i,c in enumerate(df.columns)})]) 
   for df in dfs])

由于dfs是从html表中提取的数据帧列表,因此它没有.values()方法

相关问题 更多 >