我正在寻找检查np.nanNumPy数组中NaN()出现的最快方法X.np.isnan(X)是不可能的,因为它构建了一个布尔形状的数组X.shape,这可能是巨大的.
我试过了np.nan in X,但这似乎不起作用,因为np.nan != np.nan.有没有一种快速且节省内存的方法来完成这项工作?
(对于那些会问"多么巨大"的人:我说不出来.这是图书馆代码的输入验证.)
我正在尝试使用MysqlDB将一个Pandas数据帧(或者可以使用numpy数组)写入mysql数据库.MysqlDB似乎不理解'nan',我的数据库抛出一个错误,说nan不在字段列表中.我需要找到一种方法将'nan'转换为NoneType.
有任何想法吗?
是否有任何方法可以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然后转换NaN为None,但我想知道为什么数据框以这种可怕的方式运行.
我有一个数据帧,df,有一些类型为float64的列,而其他的是对象.由于混合性质,我不能使用
df.fillna('unknown') #getting error "ValueError: could not convert string to float:"
Run Code Online (Sandbox Code Playgroud)
因为错误发生在类型为float64的列上(这是一个误导性错误消息!)
所以我希望我能做点什么
for col in df.columns[<dtype == object>]:
df[col] = df[col].fillna("unknown")
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,是否有任何这样的过滤器表达式,我可以使用df.columns?
我想,不太优雅,我能做到:
for col in df.columns:
if (df[col].dtype == dtype('O')): # for object type
df[col] = df[col].fillna('')
# still puzzled, only empty string works as replacement, 'unknown' would not work for certain value leading to error of "ValueError: Error parsing datetime string "unknown" at position 0"
Run Code Online (Sandbox Code Playgroud)
我也想知道为什么在上面的代码中用''with'unknown'替换代码可以用于某些单元但是失败的单元格中出现"ValueError:Error parsing datetime string",错误"位置0"
非常感谢!
宇
鉴于一系列
s = pd.Series([1.1, 1.2, np.nan])
s
0 1.1
1 1.2
2 NaN
dtype: float64
Run Code Online (Sandbox Code Playgroud)
如果需要将NaN转换为无(例如,与parquets一起工作),那么我希望有
0 1.1
1 1.2
2 None
dtype: object
Run Code Online (Sandbox Code Playgroud)
我认为Series.replace这将是显而易见的方式,但这是函数返回的内容:
s.replace(np.nan, None)
0 1.1
1 1.2
2 1.2
dtype: float64
Run Code Online (Sandbox Code Playgroud)
NaN向前填充,而不是被替换.通过文档,我看到如果第二个参数是None,那么第一个参数应该是字典.基于此,我希望replace要么按预期替换,要么抛出异常.
我相信这里的解决方法是
pd.Series([x if pd.notna(x) else None for x in s], dtype=object)
0 1.1
1 1.2
2 None
dtype: object
Run Code Online (Sandbox Code Playgroud)
哪个好.但我想了解为什么会出现这种情况,是否记录在案,或者它只是一个错误而且我必须清除我的git配置文件并在问题跟踪器上记录一个...任何想法?
我有一个带有'cap'列的pandas数据框.此列主要由浮点数组成,但其中包含一些字符串,例如索引2.
df =
cap
0 5.2
1 na
2 2.2
3 7.6
4 7.5
5 3.0
...
Run Code Online (Sandbox Code Playgroud)
我从csv文件导入我的数据,如下所示:
df = DataFrame(pd.read_csv(myfile.file))
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我这样做时,列'cap'完全作为字符串导入.我希望浮动被识别为浮点数和字符串作为字符串.尝试使用以下方法转换:
df['cap'] = df['cap'].astype(float)
Run Code Online (Sandbox Code Playgroud)
抛出一个错误:
could not convert string to float: na
Run Code Online (Sandbox Code Playgroud)
有没有办法让所有数字成为浮点数但是将'na'保持为字符串?
现在我有这样的DF
Word Word2 Word3
Hello NaN NaN
My My Name NaN
Yellow Yellow Bee Yellow Bee Hive
Golden Golden Gates NaN
Yellow NaN NaN
Run Code Online (Sandbox Code Playgroud)
我希望的是从我的数据框中删除所有NaN细胞.所以最后,它看起来像这样,'Yellow Bee Hive'已经移动到第1行(类似于从excel中的列中删除单元格时发生的情况):
Word Word2 Word3
1 Hello My Name Yellow Bee Hive
2 My Yellow Bee
3 Yellow Golden Gates
4 Golden
5 Yellow
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些都不起作用,因为他们删除了整条行!
df = df[pd.notnull(df['Word','Word2','Word3'])]
Run Code Online (Sandbox Code Playgroud)
要么
df = df.dropna()
Run Code Online (Sandbox Code Playgroud)
有人有什么建议吗?我应该重新索引桌子吗?
我有一个如下数据框:
data1 = {"first":["alice", "bob", "carol"],
"last_huge":["foo", "bar", "baz"]}
df = pd.DataFrame(data1)
Run Code Online (Sandbox Code Playgroud)
例如,我想将所有字符'o'替换为'a':
那我做
df.replace({"o":"a"},regex=True)
Out[668]:
first last
0 alice faa
1 bab bar
2 caral baz
Run Code Online (Sandbox Code Playgroud)
它还给我我需要的东西。
但是,当我要将'o'替换为时np.nan,它将整个字符串更改为np.nan。熊猫的文件有什么解释吗?我可以通过源代码找到一些信息。
更多信息:(它将整个字符串更改为np.nan)
df.replace({"o":np.nan},regex=True)
Out[669]:
first last
0 alice NaN
1 NaN bar
2 NaN baz
Run Code Online (Sandbox Code Playgroud) 所以我试图用np.nan我的数据框中的值替换None并注意到在这个过程中数据框中float列的数据类型更改为object即使它们不包含任何丢失的数据。
举个例子:
import pandas as pd
import numpy as np
data = pd.DataFrame({'A':np.nan,'B':1.096, 'C':1}, index=[0])
data.replace(to_replace={np.nan:None}, inplace=True)
Run Code Online (Sandbox Code Playgroud)
在调用data.dtypes之前和之后调用 toreplace显示列 B 的数据类型从 float 变为 object 而 C 的数据类型保持在 int。如果我从不会发生的原始数据中删除 A 列。我想知道为什么会发生这种变化以及如何避免这种影响。
我有两个熊猫系列:ser和ovr。
ser包含对象,并且ovr是Series对象和的稀疏对象None。ser并ovr共享相同的索引,我想ser用的对应值覆盖的每个值ovr,除非该对应的值是None。
有什么有效的方法可以做到这一点?