如何从包含多个数字的导入CSV数据构建包含Numpy Array的Pandas数据框

yv5phkfx  于 2023-01-07  发布在  其他
关注(0)|答案(2)|浏览(106)

我在这个问题上有点难。我已经创建了一个概念证明,我用一个静态的数字数组构建了一个Pandas数据框架。我让这个工作得很好,但是现在我更进一步,导入一个CSV文件来构建相同的Dataframe和Numpy Array。下面是文件的片段和我所写的内容。我想取第二列的“数字”并构建每行6个数字的数组。例如,[[11]、[21]、[27]、[36]、[62]、[24]]、[[14]、[18]、[36]、[49]、[67]、[18]]等。
CSV:

date,numbers,multiplier
09/26/2020,11 21 27 36 62 24,3
09/30/2020,14 18 36 49 67 18,2
10/03/2020,18 31 36 43 47 20,2

代码:

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)
df = pd.DataFrame(data.numbers).to_numpy()
df2 = pd.DataFrame(df, columns=['1', '2', '3', '4', '5', '6'])
print(df2.head())

错误:我期望df2中有6列数据,因为我认为在从CSV导入“numbers”列后,它已正确转换为数组,但我得到了以下内容:

数值错误:传递值的形状为(1414,1),索引表示(1414,6)

因此,我将代码更改为df2 = pd.DataFrame(df, columns=['1']),并得到以下输出。问题是,我需要它在6列中,而不是1列。

1
0  11 21 27 36 62 24
1  14 18 36 49 67 18
2  18 31 36 43 47 20

因此,正如您所看到的,我只得到了一列所有数字,而不是一个6列数字数组。

lyr7nygr

lyr7nygr1#

记住CSV代表逗号分隔值,即它读取两个逗号之间的所有内容作为一个输入。如果你想分隔数字,你必须把逗号放在它们之间,否则你必须解析6个非逗号分隔值的较长文本,并重建 Dataframe 。

vltsax25

vltsax252#

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)
df = pd.DataFrame(data.numbers).to_numpy()

那就先分了吧

df2 = df['numbers'].str.split(' ', expand=True)

相关问题