微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 更改pandas数据帧中特定列的dtype

我有一个pandas数据框,我是根据存储在xml文件中的数据创建的:

最初打开并解析xlm文件

xmlData = etree.parse(filename)
trendData = xmlData.findall("//TrendData")

我创建了一个目录,列出了所有数据名称(用作列名)作为键,并给出了xml文件中数据的位置:

Parameters = {"TreatmentUnit":("Worklist/AdminData/AdminValues/TreatmentUnit"),
          "Modality":("Worklist/AdminData/AdminValues/Modality"),
          "Energy":("Worklist/AdminData/AdminValues/Energy"),
          "FieldSize":("Worklist/AdminData/AdminValues/Fieldsize"),
          "SDD":("Worklist/AdminData/AdminValues/SDD"),
          "Gantry":("Worklist/AdminData/AdminValues/Gantry"),
          "Wedge":("Worklist/AdminData/AdminValues/Wedge"),
          "MU":("Worklist/AdminData/AdminValues/MU"),
          "My":("Worklist/AdminData/AdminValues/My"),
          "AnalyzeParametersCAXMin":("Worklist/AdminData/AnalyzeParams/CAX/Min"),
          "AnalyzeParametersCAXMax":("Worklist/AdminData/AnalyzeParams/CAX/Max"),
          "AnalyzeParametersCAXTarget":("Worklist/AdminData/AnalyzeParams/CAX/Target"),
          "AnalyzeParametersCAXnorm":("Worklist/AdminData/AnalyzeParams/CAX/norm"),
....}

这只是目录的一小部分,实际的一个列表超过80个参数
然后对目录键进行排序:

sortedKeys = list(sorted(Parameters.keys()))

为pandas数据帧创建标头:

dateList=[]
dateList.append('date')
headers = dateList+sortedKeys

然后我创建一个空的pandas数据帧,其行数与trendData中的记录数相同,列标题设置为“headers”,然后遍历填充数据帧的文件

df = pd.DataFrame(index=np.arange(0,len(trendData)), columns=headers)
for a,b in enumerate(trendData):
    result={}
    result["date"] = dateutil.parser.parse(b.attrib['date'])
    for i,j in enumerate(Parameters):
        result[j] = b.findtext(Parameters[j])
        df.loc[a]=(result)
df = df.set_index('date')

这似乎工作正常,但问题是每个列的dtype设置为’object’,而大多数应该是整数.可以使用:

df.convert_objects(convert_numeric=True)

它工作正常,但现在已被删除.
我也可以使用,例如,:

df.AnalyzeParametersBQFMax = pd.to_numeric(df.AnalyzeParametersBQFMax)

转换单个列.但有没有一种方法可以将pd.to_numeric与列名列表一起使用.我可以使用以下内容创建一个列的列表,它应该是整数;

int64list=[]
for q in sortedKeys:
    if q.startswith("AnalyzeParameters"):
        int64list.append(q)

但无法找到将此列表传递给函数方法.

解决方法:

您可以使用另一个dtype显式替换DataFrame中的列与同一列.
试试这个:

import pandas as pd
data = pd.DataFrame({'date':[2000, 2001, 2002, 2003], 'type':['A', 'B', 'A', 'C']})
data['date'] = data['date'].astype('int64')

当现在调用data.dtypes时,它应该返回以下内容

date     int64
type    object
dtype: object

对于多列,使用for循环来运行您在问题中提到的int64list.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐