Reputation: 1217
I have a table like this,
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
After using pd.concat() to join the tables to one DataFrame, it removes the individual column heading. Result:
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
I want to retain the format as it is. What I am trying to do is read the HTML document, pass it to pandas read_html function, and export it as excel.
Basically, I want to retain this format. and I am relatively new to pandas.
Upvotes: 0
Views: 495
Reputation: 1217
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])
as dfs is a list of DataFrames extracted from html tables it doesn't have the .values() method on it.
Upvotes: 0
Reputation: 31226
assign()
rename()
it so all the data frames are consistentdata = [""" 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()])
PLAYERID | PLAYERS | MEMBRESIA | JUGADORES | CARRITOS | OBSERVACION | TIMESTAMP | |
---|---|---|---|---|---|---|---|
0 | 900523 | camilo antonio aleman campagnani | nan | nan | nan | nan | 08:20:00 |
1 | 900-561 | josé raúl alemán | nan | nan | nan | nan | 08:20:00 |
2 | 900553 | nicolas ardito barletta maduro | nan | nan | nan | nan | 08:20:00 |
3 | nan | nan | nan | nan | nan | nan | 08:20:00 |
0 | 107546.0 | erasmo raúl arias boyd | nan | nan | nan | nan | 08:30:00 |
1 | 103283.0 | diego galindo lara | nan | nan | nan | nan | 08:30:00 |
2 | 100930.0 | luis carlos jaramillo pinzón | nan | nan | nan | nan | 08:30:00 |
3 | nan | nan | nan | nan | nan | nan | 08:30:00 |
0 | 102386-1 | antonio dominguez alvarez | nan | nan | nan | nan | 08:40:00 |
1 | 102386-2 | antonio enrique dominguez de obaldia | nan | nan | nan | nan | 08:40:00 |
2 | 102386 | maria del carmen de obaldia ortega | nan | nan | nan | nan | 08:40:00 |
3 | 501248 | josé luis alvarez | nan | nan | nan | nan | 08:40:00 |
Column names are wanted as rows. concat()
them back in and concat()
all data frames.
# 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()])
Upvotes: 1