更改pandas datafram中特定列的数据类型

2024-10-03 15:32:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

最初,xlm文件被打开并解析

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

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

^{pr2}$

只是80个参数的一个小部分 然后对目录键进行排序:

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

为熊猫数据帧创建了一个标头:

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

然后我创建一个空的pandas dataframe,其行数与trendData中的记录数相同,列标题设置为“headers”,然后在填充dataframe的文件中循环:

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

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

df.convert_objects(convert_numeric=True)

它工作得很好,但现在被清除了。 例如,我也可以使用:

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

转换单个列。但是有没有办法pd.to_数字列名称列表。我可以创建一个列的列表,这些列应该是整数,使用以下命令:

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

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


Tags: 文件数据inpandasdf列表fordate
2条回答

对于多个列,可以这样做:

cols = df.filter(like='AnalyzeParameters').columns.tolist()
df[cols] = df[cols].astype(np.int64)

您可以显式地用同一列替换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时,它应该返回以下内容:

^{pr2}$

对于多个列,使用for循环遍历您在问题中提到的int64list。在

相关问题 更多 >