如何从dataframe中一列含有字母和数组的值中提取其中的数字

date例子:

Price: 2450.000000, C: 618.000000, P: 0.500000, Diff: 617.500000, YSettle_C: 618.000000, YSettle_P: 0.500000
Price: 2500.000000, C: 568.000000, P: 0.500000, Diff: 567.500000, YSettle_C: 568.000000, YSettle_P: 0.500000
Price: 2550.000000, C: 518.500000, P: 1.000000, Diff: 517.500000, YSettle_C: 518.500000, YSettle_P: 1.000000
Price: 2600.000000, C: 469.500000, P: 2.000000, Diff: 467.500000, YSettle_C: 469.500000, YSettle_P: 2.000000
Price: 2650.000000, C: 421.500000, P: 3.500000, Diff: 418.000000, YSettle_C: 421.500000, YSettle_P: 3.500000

将以上数据保存为TXT文件在D盘,并命名为d.txt

import pandas as pd 
import numpy as np
df_news = pd.read_table('D:\\d.txt',header = None)

使用以上代码读取该文件,然后使用下一句代码读取该文件的格式:

print (type(df_news))

输出结果为:

<class 'pandas.core.frame.DataFrame'>

可以看到是一个dataframe类型的文件。

工作需求是想读取每一行的price后面的数字,作为K;C后面的数字,作为C;P后面的数字,作为P。

但是由于读取出来的dataframe是一个5*1的数组,并且该数组没有列标签。

实现方法如下:

k=[]
c=[]
p=[]


for i in df_news[0]:
    k.append(i[7:11])   
    c.append(i[23:30])   #取的是每一行中[x:y]的值
    p.append(i[37:45])
r=pd.DataFrame()
r['k']=k
r['c']=c
r['p']=p
r=r.astype('float')

然后print即可输出list形式的数组,然后再进行进一步的运算即可。

补充一些解决这个问题走过的弯路:

  1. 尝试使用dict类型对元数据进行调取,但是该数据类型虽然看起来很像是dict类型,实际上使用type函数输出该数据类型为dataframe类型。如果使用dict将该数据转成字典类型,实际上是没有key的,字典里面只有一个值,就是所有的内容,所以该方法不可行。
  2. 尝试将原始数据中的字母全都删除,只留数字,然后使用split函数将该str(df_news)分割,然后给dataframe的column赋值。此处的问题是分割后输出的结果会有一些乱码的情况,不知道应该如何处理,所以该方法也行不通。
    原文作者:amuyiweiyang
    原文地址: https://blog.csdn.net/amuyiweiyang/article/details/117559415
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞