gpt4 book ai didi

python - 更改 Pandas 数据框中特定列的数据类型

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:20 25 4
gpt4 key购买 nike

我有一个 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 数据框创建一个 header :

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

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

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')

这似乎工作正常,但问题是每个列的数据类型都设置为“对象”,而大多数应该是整数。可以使用:

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)

但找不到将此列表传递给函数的方法。

最佳答案

您可以将 DataFrame 中的列显式替换为同一列,只需使用另一个 dtype。试试这个:

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

关于python - 更改 Pandas 数据框中特定列的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37549938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com