首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >分配pandas数据帧列数据类型

分配pandas数据帧列数据类型
EN

Stack Overflow用户
提问于 2014-01-18 07:16:28
回答 4查看 213.2K关注 0票数 134

我想在pd.Dataframe中设置多个列的dtype(我有一个文件,我必须手动将其解析为列表列表,因为该文件不支持pd.read_csv)

代码语言:javascript
复制
import pandas as pd
print pd.DataFrame([['a','1'],['b','2']],
                   dtype={'x':'object','y':'int'},
                   columns=['x','y'])

我得到了

代码语言:javascript
复制
ValueError: entry not a 2- or 3- tuple

我可以设置它们的唯一方法是遍历每个列变量并使用astype重新转换。

代码语言:javascript
复制
dtypes = {'x':'object','y':'int'}
mydata = pd.DataFrame([['a','1'],['b','2']],
                      columns=['x','y'])
for c in mydata.columns:
    mydata[c] = mydata[c].astype(dtypes[c])
print mydata['y'].dtype   #=> int64

有没有更好的方法?

EN

回答 4

Stack Overflow用户

发布于 2017-04-08 09:26:14

您可以使用pandas DataFrame.astype(dtype, copy=True, raise_on_error=True, **kwargs)显式设置类型,并传入包含要dtype的dtype的字典

下面是一个例子:

代码语言:javascript
复制
import pandas as pd
wheel_number = 5
car_name = 'jeep'
minutes_spent = 4.5

# set the columns
data_columns = ['wheel_number', 'car_name', 'minutes_spent']

# create an empty dataframe
data_df = pd.DataFrame(columns = data_columns)
df_temp = pd.DataFrame([[wheel_number, car_name, minutes_spent]],columns = data_columns)
data_df = data_df.append(df_temp, ignore_index=True) 

你会得到

代码语言:javascript
复制
In [11]: data_df.dtypes
Out[11]:
wheel_number     float64
car_name          object
minutes_spent    float64
dtype: object

使用

代码语言:javascript
复制
data_df = data_df.astype(dtype= {"wheel_number":"int64",
        "car_name":"object","minutes_spent":"float64"})

现在你可以看到它已经改变了

代码语言:javascript
复制
In [18]: data_df.dtypes
Out[18]:
wheel_number       int64
car_name          object
minutes_spent    float64
票数 54
EN

Stack Overflow用户

发布于 2016-07-02 12:49:53

设置列类型的另一种方法是首先构造一个具有所需类型的numpy记录数组,填充它,然后将其传递给DataFrame构造函数。

代码语言:javascript
复制
import pandas as pd
import numpy as np    

x = np.empty((10,), dtype=[('x', np.uint8), ('y', np.float64)])
df = pd.DataFrame(x)

df.dtypes ->

x      uint8
y    float64
票数 14
EN

Stack Overflow用户

发布于 2018-03-09 06:25:59

最好使用类型化的np.arrays,然后将数据和列名作为字典进行传递。

代码语言:javascript
复制
import numpy as np
import pandas as pd
# Feature: np arrays are 1: efficient, 2: can be pre-sized
x = np.array(['a', 'b'], dtype=object)
y = np.array([ 1 ,  2 ], dtype=np.int32)
df = pd.DataFrame({
   'x' : x,    # Feature: column name is near data array
   'y' : y,
   }
 )
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21197774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档