pandas如何将CSV导入的单列交替数字行拆分生成新列
实现方法
默认你导入数据后得到的DataFrame仅有一列,列名为raw,你可以按以下两种方式实现需求:
方法一:适用于数据严格按「文本行+数字行」交替排列的场景
代码更简洁,运行效率更高:
import pandas as pd # 先去除每行首尾的空白符,避免空格干扰数字判断 df['raw'] = df['raw'].str.strip() # 生成纯数字行的判断掩码 is_number_row = df['raw'].str.isnumeric() # 分别提取文本列和数字列,按顺序对齐拼接 result = pd.DataFrame({ "文本列": df.loc[~is_number_row, "raw"].values, "数字列": df.loc[is_number_row, "raw"].values })
方法二:适用于存在多余空行、排列可能有异常的场景
鲁棒性更强,容错率更高:
import pandas as pd df['raw'] = df['raw'].str.strip() # 过滤掉空行 df = df[df['raw'].ne('')].reset_index(drop=True) is_number_row = df['raw'].str.isnumeric() # 每遇到一个非数字行就生成一个新分组,每个分组对应一行最终结果 df['group_id'] = (~is_number_row).cumsum() # 分组聚合得到两列结果 result = df.groupby('group_id').agg( 文本列 = ('raw', lambda x: x[~x.str.isnumeric()].iloc[0]), 数字列 = ('raw', lambda x: x[x.str.isnumeric()].iloc[0]) ).reset_index(drop=True)
运行完上述代码后,result就是你需要的两列格式的结果。
内容的提问来源于stack exchange,提问作者Zaind
相关产品推荐
相关产品推荐

