使用Pandas将Excel用户数据转置为DataFrame的技术求助
解析Excel第一列并转置用户id/full字段的Pandas实现
情况1:id和full按行交替排列(每行一个字段)
比如原始Excel第一列内容为:
id: 1001
full: Alice Smith
id: 1002
full: Bob Johnson
处理代码:
import pandas as pd # 读取Excel第一列(无列名时指定自定义列名) df_raw = pd.read_excel("your_large_file.xlsx", usecols=[0], header=None, names=["raw"]) # 按每2行一组分组,转置后得到每个用户的id和full字段 user_groups = df_raw.index // 2 df_temp = df_raw.groupby(user_groups)["raw"].apply(lambda x: pd.Series(x.values)).T # 重命名列并提取字段的实际值 df_temp.columns = ["id", "full"] df_temp["id"] = df_temp["id"].str.extract(r"id:\s*(.*)") df_temp["full"] = df_temp["full"].str.extract(r"full:\s*(.*)") # 重置索引得到最终结构的DataFrame df_final = df_temp.reset_index(drop=True)
情况2:id和full在同一行(空格/分隔符分隔)
比如原始Excel第一列内容为:
id: 1001 full: Alice Smith
id: 1002 full: Bob Johnson
处理代码:
import pandas as pd df_raw = pd.read_excel("your_large_file.xlsx", usecols=[0], header=None, names=["raw"]) # 用正则直接提取同一行中的id和full值 df_final = df_raw["raw"].str.extract(r"id:\s*(.*?)\s+full:\s*(.*)") df_final.columns = ["id", "full"]
处理超大型Excel(分块读取)
如果文件过大无法一次性加载,采用分块处理避免内存溢出:
import pandas as pd chunk_size = 10000 # 按需调整块大小 processed_chunks = [] # 分块读取并逐块处理(这里用情况1的逻辑,可根据实际格式替换) for chunk in pd.read_excel("your_large_file.xlsx", usecols=[0], header=None, names=["raw"], chunksize=chunk_size): user_groups = chunk.index // 2 chunk_temp = chunk.groupby(user_groups)["raw"].apply(lambda x: pd.Series(x.values)).T chunk_temp.columns = ["id", "full"] chunk_temp["id"] = chunk_temp["id"].str.extract(r"id:\s*(.*)") chunk_temp["full"] = chunk_temp["full"].str.extract(r"full:\s*(.*)") processed_chunks.append(chunk_temp) # 合并所有处理后的块 df_final = pd.concat(processed_chunks, ignore_index=True)
注意事项
- 若原始字段格式不是
id: xxx的形式,需调整正则表达式或字符串分割逻辑适配实际格式 - 若每个用户的数据块包含更多字段,可通过定位
id行的索引,取对应后续行提取full字段
内容的提问来源于stack exchange,提问作者Umberto
相关产品推荐
相关产品推荐

