You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CSV数据中用NumPy数组构建含6列的Pandas DataFrame

解决CSV中numbers列拆分为多列的问题

问题根源

你遇到的ValueError是因为直接将numbers列转成numpy数组后,每个元素仍是完整的空格分隔字符串,数组形状为(1414,1),但你试图指定6列,形状不匹配;调整后仅得到1列,也是因为没有对字符串进行拆分,只是把每个完整字符串作为单列值。

解决方案

核心是先将numbers列的字符串按空格拆分成6个独立字段,再合并到原数据中。以下是两种高效实现方式:

方法1:使用str.split(expand=True)(推荐)

这是Pandas中拆分字符串列最直接高效的方式,expand=True会直接将拆分结果转为多列DataFrame:

import pandas as pd

# 读取数据并处理日期排序
data = pd.read_csv('pbhistory.csv')
data['date'] = pd.to_datetime(data.date, infer_datetime_format=True)
data.sort_values(by='date', ascending=True, inplace=True)

# 拆分numbers列为6列,设置列名
split_numbers = data['numbers'].str.split(' ', expand=True)
split_numbers.columns = ['1', '2', '3', '4', '5', '6']

# 合并原数据的日期、multiplier列与拆分后的数字列
final_df = pd.concat([data[['date', 'multiplier']], split_numbers], axis=1)

# 可选:将拆分后的列转为整数类型
final_df[['1', '2', '3', '4', '5', '6']] = final_df[['1', '2', '3', '4', '5', '6']].astype(int)

print(final_df.head())

方法2:使用apply结合pd.Series

如果需要更灵活的拆分逻辑(比如处理不规则空格),可以用apply遍历每行字符串并转为Series:

import pandas as pd

data = pd.read_csv('pbhistory.csv')
data['date'] = pd.to_datetime(data.date, infer_datetime_format=True)
data.sort_values(by='date', ascending=True, inplace=True)

# 拆分字符串并转为多列
split_numbers = data['numbers'].apply(lambda x: pd.Series(x.split()))
split_numbers.columns = ['1', '2', '3', '4', '5', '6']

final_df = pd.concat([data[['date', 'multiplier']], split_numbers], axis=1)
final_df[['1', '2', '3', '4', '5', '6']] = final_df[['1', '2', '3', '4', '5', '6']].astype(int)

print(final_df.head())

预期输出

执行代码后会得到包含日期、multiplier和6个数字列的DataFrame:

date  multiplier   1   2   3   4   5   6
0 2020-09-26           3  11  21  27  36  62  24
1 2020-09-30           2  14  18  36  49  67  18
2 2020-10-03           2  18  31  36  43  47  20

内容的提问来源于stack exchange,提问作者user2643864

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:35:17