pandas数据帧在拆分非分隔文本字段后更正数据类型



我有一个包含非结构化数据的excel文件。1列包含4条数据的文本,我正在将其导入数据帧。。。某些数据可能与列的预期数据不匹配

03/04/21    08:08:26  ->  -   50.20
03/04/21    11:08:26  ->  +  283.75
03/04/21    10:48:34  ->  Scale Timeout

我能够.split(' ', expand=True)这个得到12列。

0 1  2  3          4 5    6 7   8 9       10     11
0     03/04/21           08:08:26     ->     -             50.20
1     03/04/21           08:28:26     ->     -             50.20

当我复制cols[0,4,8,11],重命名它们并复制到一个新的df:时,这就像一个典型的数据帧

date      time sign   mass
0     03/04/21  08:08:26    -  50.20
1     03/04/21  08:28:26    -  50.20
2     03/04/21  08:48:26    -  50.15

现在情况急转直下。。。我甚至不能print(df['date'])

我得到错误:只有整数标量数组才能转换为标量索引

我检查了dtype,所有列都是type对象。我试过.astype(str(,但仍然得到相同的错误

#混淆

一定是.split((创建了一个我没有正确寻址的数据类型?

具有非结构化数据的原始数据帧:

df:

col
0  03/04/21    08:08:26  ->  -   50.20
1  03/04/21    11:08:26  ->  +  283.75
2  03/04/21    10:48:34  ->  -  50.15

然后在您的df上尝试以下操作:

df2 = pd.DataFrame(df.col.str.split().str.join(' ').str.split(' ').values.tolist(), columns=['date','time','symbol','sign','mass'])

df2:

date      time symbol sign    mass
0  03/04/21  08:08:26     ->    -   50.20
1  03/04/21  11:08:26     ->    +  283.75
2  03/04/21  10:48:34     ->    -   50.15

df2将所有不同的数据作为单独的列。现在,您只需从df2中选择所需的列即可。

print(df2['date'])
0    03/04/21
1    03/04/21
2    03/04/21
Name: date, dtype: object

我所做的是首先删除非结构化数据中所有多余的空白,并用一个空格替换它们。然后,我将split(' ')应用于该数据,以将其划分为所需的数据片段。

当您复制到新的df时,它将是新的列表。

打印日期必须使用print(df[0](。df[1]表示时间,df[2]表示符号,df[3]表示质量

只有整数标量数组可以转换为标量索引

df是一个列表对象,您可以检查df的数据类型,您只能在列表中的索引中使用整数

最新更新