如何使用Pandas将多空格分隔数据拆分为带列名的DataFrame
问题描述
我的数据每行格式如下:
8,0 0 1 0.000000000 8082 A WS 24664872 + 8 <- (8,2) 23604576
我希望将数据拆分为带列名的格式:
col1 col2 col3 col4 col5 col6 col7 col8 col9 8,0 0 1 0.000000000 8082 A WS 24664872 + 8 <- (8,2) 23604576
我是Python数据处理新手,不知道怎么正确分隔列。因为文件很大,我目前用分块处理的代码如下:
import pandas as pd file_path = "test_data.txt" chunk_size = 1000000 # column_names = ["col1", "col2", "col3"] df_list = [] for chunk in pd.read_csv(file_path, chunksize=chunk_size): df_list.append(chunk) df = pd.concat(df_list) for row in df.iterrows(): print(row)
解决方案
你的问题核心是原数据为多空格分隔,但最后一列col9包含空格,不能直接用默认的分隔逻辑。下面提供两种可靠的分块处理方案:
方案1:正则分隔符处理
利用正则匹配任意数量的空格作为分隔符,同时指定列名,确保最后一列完整保留:
import pandas as pd file_path = "test_data.txt" chunk_size = 1000000 column_names = ["col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9"] df_list = [] for chunk in pd.read_csv( file_path, chunksize=chunk_size, sep=r'\s+', # 匹配一个或多个连续空格 header=None, # 原始文件无表头 names=column_names, engine='python' # Python引擎支持正则分隔符 ): df_list.append(chunk) df = pd.concat(df_list) # 验证结果 print(df.head())
方案2:固定宽度分割(更精准)
如果数据列的宽度固定,用read_fwf可以完全避免分割错误:
import pandas as pd file_path = "test_data.txt" chunk_size = 1000000 column_names = ["col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9"] # 根据示例行定义每列的字符宽度,最后一列设为None捕获剩余所有内容 col_widths = [5, 8, 6, 12, 6, 4, 4, 10, None] df_list = [] for chunk in pd.read_fwf( file_path, chunksize=chunk_size, widths=col_widths, header=None, names=column_names ): df_list.append(chunk) df = pd.concat(df_list) # 验证结果 print(df.head())
内容的提问来源于stack exchange,提问作者kai
相关产品推荐
相关产品推荐

