相关疑难解决方法(0)

更改Pandas中列的数据类型

我想将表格(表示为列表列表)转换为Pandas DataFrame.作为一个极其简化的例子:

a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a)
Run Code Online (Sandbox Code Playgroud)

将列转换为适当类型的最佳方法是什么,在这种情况下,将第2列和第3列转换为浮点数?有没有办法在转换为DataFrame时指定类型?或者最好先创建DataFrame,然后循环遍历列以更改每列的类型?理想情况下,我想以动态方式执行此操作,因为可能有数百列,我不想确切地指定哪些列属于哪种类型.我可以保证的是,每列包含相同类型的值.

python types casting dataframe pandas

688
推荐指数
11
解决办法
132万
查看次数

如何在Python中的Pandas数据框中用None替换值?

是否有任何方法可以None在Python 中用Pandas 替换值?

您可以使用df.replace('pre', 'post')并可以将值替换为另一个值,但如果您想要替换None值,则无法执行此操作,如果您尝试,则会得到一个奇怪的结果.

所以这是一个例子:

df = DataFrame(['-',3,2,5,1,-5,-1,'-',9])
df.replace('-', 0)
Run Code Online (Sandbox Code Playgroud)

返回成功的结果.

但,

df.replace('-', None)
Run Code Online (Sandbox Code Playgroud)

返回以下结果:

0
0   - // this isn't replaced
1   3
2   2
3   5
4   1
5  -5
6  -1
7  -1 // this is changed to `-1`...
8   9
Run Code Online (Sandbox Code Playgroud)

为什么会返回这么奇怪的结果?

由于我想将这个数据帧倒入MySQL数据库,因此我无法将NaN值放入数据框中的任何元素中,而是想放入None.当然,您可以先更改'-'NaN然后转换NaNNone,但我想知道为什么数据框以这种可怕的方式运行.

python replace nan dataframe pandas

68
推荐指数
5
解决办法
13万
查看次数

熊猫:转换为数字,必要时创建NaN

假设我在数据框中有一个列,其中包含一些数字和一些非数字

>> df['foo']
0       0.0
1     103.8
2     751.1
3       0.0
4       0.0
5         -
6         -
7       0.0
8         -
9       0.0
Name: foo, Length: 9, dtype: object
Run Code Online (Sandbox Code Playgroud)

如何将此列转换为np.float,并将其他所有不浮动的列转换为NaN

当我尝试:

>> df['foo'].astype(np.float)
Run Code Online (Sandbox Code Playgroud)

要么

>> df['foo'].apply(np.float)
Run Code Online (Sandbox Code Playgroud)

我明白了 ValueError: could not convert string to float: -

python pandas

41
推荐指数
4
解决办法
7万
查看次数

Pandas".convert_objects(convert_numeric = True)"已弃用

我的代码中有这一行将数据转换为数字...

data["S1Q2I"] = data["S1Q2I"].convert_objects(convert_numeric=True)
Run Code Online (Sandbox Code Playgroud)

问题是现在新的pandas发布(0.17.0)说这个函数已被弃用..这是错误:

FutureWarning: convert_objects is deprecated.  
Use the data-type specific converters pd.to_datetime, 
pd.to_timedelta and pd.to_numeric. 
data["S3BD5Q2A"] = data["S3BD5Q2A"].convert_objects(convert_numeric=True)
Run Code Online (Sandbox Code Playgroud)

所以,我去了新的文档,我找不到任何如何使用新函数转换我的数据的例子......

它只说这个:

"不推荐使用DataFrame.convert_objects,而选择类型特定的函数pd.to_datetime,pd.to_timestamp和pd.to_numeric(0.17.0中的新增功能)(GH11133)."

你能帮忙的话,我会很高兴!

python pandas

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

如何使用布尔掩码在pandas DataFrame中用nan替换'any strings'?

我有一个227x4 DataFrame,国家名称和数值要清理(争吵?).

这是DataFrame的抽象:

import pandas as pd
import random
import string
import numpy as np
pdn = pd.DataFrame(["".join([random.choice(string.ascii_letters) for i in range(3)]) for j in range (6)], columns =['Country Name'])
measures = pd.DataFrame(np.random.random_integers(10,size=(6,2)), columns=['Measure1','Measure2'])
df = pdn.merge(measures, how= 'inner', left_index=True, right_index =True)

df.iloc[4,1] = 'str'
df.iloc[1,2] = 'stuff'
print(df)

  Country Name Measure1 Measure2
0          tua        6        3
1          MDK        3    stuff
2          RJU        7        2
3          WyB        7        8
4          Nnr      str        3
5          rVN        7        4
Run Code Online (Sandbox Code Playgroud)

如何np.nan在不触及国家/地区名称的情况下在所有列中替换字符串值? …

python numpy dataframe python-3.x pandas

13
推荐指数
3
解决办法
3838
查看次数

删除一列中的值等于另一列中的值的行

我正在努力弄清楚如何从pandas数据框中删除行,其中两个指定的列在一行中具有相同的值.

例如,在下面的示例中,我想删除第2列和第4列中具有重复值的行.

例如:

Column1 Column2 Column3 Column4
  Pat     123     John    456
  Pat     123     John    345 
  Jimmy   678     Mary    678 
  Larry   678     James   983
Run Code Online (Sandbox Code Playgroud)

会变成:

Column1 Column2 Column3 Column4
  Pat     123     John    456 
  Pat     123     John    345
  Larry   678     James   983
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏,谢谢!

python pandas

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

Python-'str'和'int'的实例之间不支持'TypeError:'<='

我有一个df列,其值的范围是-5到10。我想将值<= -1更改为negative,将所有0值更改为neutral,将所有值> = 1更改为positive。但是,下面的代码为“负”产生以下错误。

# Function to change values to labels

test.loc[test['sentiment_score'] > 0, 'sentiment_score'] = 'positive'
test.loc[test['sentiment_score'] == 0, 'sentiment_score'] = 'neutral'
test.loc[test['sentiment_score'] < 0, 'sentiment_score'] = 'negative'

Data:                                  Data After Code:
Index     Sentiment                    Index     Sentiment
 0         2                            0         positive
 1         0                            1         neutral
 2        -3                            2         -3
 3         4                            3         positive
 4        -1                            4         -1
 ...                                    ...
 k         5                            k         positive
Run Code Online (Sandbox Code Playgroud)

pandas._libs.ops.scalar_compare TypeError中的文件“ pandas_libs \ ops.pyx”,行98,TypeError:'str'和'int实例之间不支持'<='

我认为这与将负数视为字符串而不是float / int的函数有关,但是我尝试了以下代码来更正此错误,并且它什么都不会改变。任何帮助,将不胜感激。

test['sentiment_score'] = test['sentiment_score'].astype(float) …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

标签 统计

pandas ×7

python ×7

dataframe ×3

casting ×1

nan ×1

numpy ×1

python-3.x ×1

replace ×1

types ×1