相关疑难解决方法(0)

NumPy或Pandas:将数组类型保持为整数,同时具有NaN值

是否有一种首选方法可以将numpy数组的数据类型固定为int(int64或者其他),同时仍然将内部元素列为numpy.NaN

特别是,我正在将内部数据结构转换为Pandas DataFrame.在我们的结构中,我们有整数类型的列仍然有NaN(但列的dtype是int).如果我们把它变成一个DataFrame,它似乎将所有东西重铸为浮点数,但我们真的很喜欢int.

思考?

事情尝试:

我尝试使用from_records()pandas.DataFrame下的函数coerce_float=False,但这并没有帮助.我也尝试使用带有NaN fill_value的NumPy掩码数组,这也没有用.所有这些都导致列数据类型变为浮点数.

python int numpy type-conversion pandas

140
推荐指数
6
解决办法
5万
查看次数

熊猫:将dtype'object'转换为int

我已经在Pandas中读取了一个SQL查询,并且这些值以dtype'object'形式出现,尽管它们是字符串,日期和整数.我能够将日期'对象'转换为Pandas datetime dtype,但是在尝试转换字符串和整数时遇到错误.

这是一个例子:

>>> import pandas as pd
>>> df = pd.read_sql_query('select * from my_table', conn)
>>> df
    id    date          purchase
 1  abc1  2016-05-22    1
 2  abc2  2016-05-29    0
 3  abc3  2016-05-22    2
 4  abc4  2016-05-22    0

>>> df.dtypes
 id          object
 date        object
 purchase    object
 dtype: object
Run Code Online (Sandbox Code Playgroud)

df['date']日期转换为日期时间:

>>> pd.to_datetime(df['date'])
 1  2016-05-22
 2  2016-05-29
 3  2016-05-22
 4  2016-05-22
 Name: date, dtype: datetime64[ns] 
Run Code Online (Sandbox Code Playgroud)

但是在尝试将其转换df['purchase']为整数时出现错误:

>>> df['purchase'].astype(int)
 ....
 pandas/lib.pyx in pandas.lib.astype_intsafe (pandas/lib.c:16667)()
 pandas/src/util.pxd in util.set_value_at (pandas/lib.c:67540)()

 TypeError: …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

39
推荐指数
6
解决办法
15万
查看次数

何时申请(pd.to_numeric)以及何时在python中使用astype(np.float64)?

我有一个名为pandas的DataFrame对象xiv,它有一列int64Volume测量值.

In[]: xiv['Volume'].head(5)
Out[]: 

0    252000
1    484000
2     62000
3    168000
4    232000
Name: Volume, dtype: int64
Run Code Online (Sandbox Code Playgroud)

我已经阅读了其他帖子(比如这个这个),提出了以下解决方案.但是,当我使用任何一种方法时,它似乎不会改变dtype底层数据:

In[]: xiv['Volume'] = pd.to_numeric(xiv['Volume'])

In[]: xiv['Volume'].dtypes
Out[]: 
dtype('int64')
Run Code Online (Sandbox Code Playgroud)

要么...

In[]: xiv['Volume'] = pd.to_numeric(xiv['Volume'])
Out[]: ###omitted for brevity###

In[]: xiv['Volume'].dtypes
Out[]: 
dtype('int64')

In[]: xiv['Volume'] = xiv['Volume'].apply(pd.to_numeric)

In[]: xiv['Volume'].dtypes
Out[]: 
dtype('int64')
Run Code Online (Sandbox Code Playgroud)

我也尝试制作一个单独的pandas Series并使用上面列出的方法在该系列上并重新分配给x['Volume']obect,这是一个pandas.core.series.Series对象.

但是,我已经使用numpy包的float64类型找到了解决这个问题的方法- 这有效,但我不知道它为什么会有所不同.

In[]: xiv['Volume'] = xiv['Volume'].astype(np.float64)

In[]: xiv['Volume'].dtypes
Out[]: 
dtype('float64') …
Run Code Online (Sandbox Code Playgroud)

python types numpy dataframe pandas

30
推荐指数
1
解决办法
4万
查看次数

Pandas:ValueError:整数列在第 2 列中有 NA 值

尝试将 csv 文件读入我的数据类型时出现值错误。我需要确保它有效并且每一行都被读入并且是正确的。

错误例如:

Pandas: ValueError: Integer column has NA values in column 2
Run Code Online (Sandbox Code Playgroud)

我试图在 Pandas Python 库中转换为整数,但有一个值。

但是,我读入的 csv 文件似乎有一些错误的条目,因为它由手动输入的测试结果组成。

我读到使用这个命令:

test = pd.read_csv("test.csv", sep=";", names=pandasframe_names, dtype=pandasframe_datatypes, skiprows=1)
Run Code Online (Sandbox Code Playgroud)

名称为 A、B、C、D 和 E,并且定义正确。

如果有错误的条目,我需要一种处理此问题而不丢失整行的方法。

这是我的情况:我有一个 pandas 数据框,它读取 csv 表,该表有 5 列,标题为 A、B、C、D、E。我使用参数skiprows=1 跳过第一行

pandas_datatypes={'A': pd.np.int64, 'B':pd.np.int64, 'C':pd.np.float64, 'D':object, 'E':object}
Run Code Online (Sandbox Code Playgroud)

我的行有 5 列,前 2 列是 int64,第三列是 float64,接下来的 2 列是对象(例如字符串)

当我读入它时,这些相当于我的数据类型。含义dtype=pandas_datatypes

现在我有这样的条目:

entry 1: 5; 5; 2.2; pedagogy; teacher (correct)
entry 2: 8; 7.0; 2.2; pedagogy; teacher (incorrect, as second is …
Run Code Online (Sandbox Code Playgroud)

python pandas

19
推荐指数
2
解决办法
3万
查看次数

如何解决 - TypeError: 无法安全地将非等价的 float64 转换为 int64?

我正在尝试将 DF 中的一些浮点列转换为 int,但出现上述错误。我尝试过将其转换以及 fillna 为 0(我不喜欢这样做,因为在我的数据集中需要 NA)。

我究竟做错了什么?我都尝试过:

orginalData[NumericColumns] = orginalData[NumericColumns].astype('Int64')
#orginalData[NumericColumns] = orginalData[NumericColumns].fillna(0).astype('Int64')
Run Code Online (Sandbox Code Playgroud)

但它一直导致同样的错误

TypeError: cannot safely cast non-equivalent float64 to int64
Run Code Online (Sandbox Code Playgroud)

我可以做什么来转换列?

python pandas

19
推荐指数
2
解决办法
3万
查看次数

如何在pandas中将变量指定为序数/分类?

我正在尝试使用scikit-learn在数据集上运行一些机器学习算法.我的数据集有一些类似于类别的功能.就像一个特征是A,其值1,2,3指定了某些东西的质量.1:Upper, 2: Second, 3: Third class.所以它就像一个序数变量.

同样地,我已经重新编码的变量城市,有三个值('London', Zurich', 'New York'1,2,3,但与价值没有具体的偏好.所以现在这是一个名义上的分类变量.

如何在pandas中指定算法将其视为分类和序数等?与R一样,分类变量由因子(a)指定,因此不被视为连续值.在pandas/python中有类似的东西吗?

解决这个问题的最佳方法是什么?

谢谢

python pandas scikit-learn

10
推荐指数
2
解决办法
1万
查看次数

read_csv 使用 dtypes 但列中有 na 值

我使用以下代码通过指定每个列的类型来读取 csv:

clean_pdf_type=pd.read_csv('table_updated.csv',usecols=col_names,dtype =col_types)
Run Code Online (Sandbox Code Playgroud)

但它有错误:

ValueError: Integer column has NA values in column 298 
Run Code Online (Sandbox Code Playgroud)

不确定如何跳过 NA?

python csv dataframe pandas

9
推荐指数
1
解决办法
1万
查看次数

将float转换为整数时,pandas舍入

我有一个带有浮点(十进制)索引的pandas DataFrame,我用它来查找值(类似于字典).由于浮点数不完全是它们应该将所有值乘以10,并.astype(int)在将其设置为索引之前将其转换为整数.然而,这似乎做了一个floor而不是四舍五入.因此1.999999999999999992被转换为1而不是2.使用pandas.DataFrame.round()之前的方法舍入不会避免此问题,因为值仍然存储为浮点数.

最初的想法(显然是一个关键错误)是这样的:

idx = np.arange(1,3,0.001)
s = pd.Series(range(2000))
s.index=idx
print(s[2.022])
Run Code Online (Sandbox Code Playgroud)

尝试转换为整数:

idx_int = idx*1000
idx_int = idx_int.astype(int)
s.index = idx_int
for i in range(1000,3000):
    print(s[i])
Run Code Online (Sandbox Code Playgroud)

输出总是有点随机,因为整数的"实数"值可能略高于或低于所需值.在这种情况下,索引包含值1000的两倍,并且不包含值2999.

python floating-point int rounding pandas

6
推荐指数
2
解决办法
1万
查看次数

转换pandas数据框中包含nan、连字符和逗号的列的数据类型

df = pd.read_csv("data.csv", encoding = "ISO-8859-1")
Run Code Online (Sandbox Code Playgroud)

现在,我有一个列,其中的值如下:

参考样本数据:

在此输入图像描述

现在,我想使用以下代码将列 a 转换为数字格式:

df[['A']] = df[['A']].astype(int)
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误。问题是我将所有三个(nan、连字符和逗号)都放在一列中,并且需要一起解决它们。有没有更好的方法来转换这些而不用替换(nan 到 -1)之类的东西?

python pandas

5
推荐指数
1
解决办法
374
查看次数

Pandas - 将列转换为 int 并强制 NaN

给定如下数据框

colVals = [['05:17:55.703', '', '', '', '', '', '21', '', '3', '89', '891', '11', ''], ['05:17:55.703', '', '', '', '', '', '21', '', '3', '217', '891', '12', ''], ['05:17:55.703', '', '', '', '', '', '21', '', '3', '217', '891', '13', ''], ['05:17:55.703', '', '', '', '', '', '21', '', '3', '217', '891', '15', ''], ['05:17:55.703', '', '', '', '', '', '21', '', '3', '217', '891', '16', ''], ['05:17:55.703', '', '', '', '', '', '21', '', '3', '217', '891', '17', …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

4
推荐指数
1
解决办法
5659
查看次数

Pandas将字符串列和NaN(浮点数)转换为整数,保留NaN

我在转换包含字符串格式(类型:str)和NaN(类型:float64)的2位数字的列时遇到问题.我想以这种方式获得一个新列:NaN,其中有NaN和整数,其中有两个数字的字符串格式.举个例子:我想从列YearBirth1获取列Yearbirth2,如下所示:

YearBirth1  #numbers here are formatted as strings: type(YearBirth1[0])=str
        34  # and NaN are floats: type(YearBirth1[2])=float64.
        76
       Nan
        09
       Nan
        91

YearBirth2  #numbers here are formatted as integers: type(YearBirth2[0])=int
        34  #NaN can remain floats as they were. 
        76
       Nan
         9
       Nan
        91
Run Code Online (Sandbox Code Playgroud)

我试过这个:

csv['YearBirth2'] = (csv['YearBirth1']).astype(int)
Run Code Online (Sandbox Code Playgroud)

正如我所料,我得到了这个错误:

ValueError: cannot convert float NaN to integer
Run Code Online (Sandbox Code Playgroud)

所以我尝试了这个:

csv['YearBirth2'] = (csv['YearBirth1']!=NaN).astype(int)
Run Code Online (Sandbox Code Playgroud)

并得到这个错误:

NameError: name 'NaN' is not defined
Run Code Online (Sandbox Code Playgroud)

最后我试过这个:

csv['YearBirth2'] = (csv['YearBirth1']!='NaN').astype(int)
Run Code Online (Sandbox Code Playgroud)

没有错误,但当我检查列YearBirth2时,这是结果:

YearBirth2:
         1
         1
         1
         1
         1
         1
Run Code Online (Sandbox Code Playgroud)

非常糟糕..我认为这个想法是正确的但是有一个问题让Python能够理解我对NaN的意思..或者我尝试的方法可能是错的..

我也使用了pd.to_numeric()方法,但这种方式我获得了浮点数,而不是整数.

有什么帮助?!谢谢大家! …

python nan type-conversion pandas

3
推荐指数
1
解决办法
5078
查看次数