提取pandas中不浮动的DataFrame索引值
Extract the index values of DataFrame that are not float in pandas
我正在使用预计仅包含浮点类型索引值的 DataFrame,但我怀疑由于某种原因存在不同类型的值,导致索引的类型为 dtype='object'
。我想提取非浮点类型的索引值,看看是否是这种情况。
示例
df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]}, index=[0.0,1.5,'a'])
在这种情况下提取的结果将是一个包含单个元素的列表 ['a']
。
将 isinstance
与 map
一起使用:
idx = df.index[(df.index.map(lambda x: isinstance(x, float)) == False)]
print (idx)
Index(['a'], dtype='object')
您是否只想要一种方法来确定您拥有哪种虚假数据?如果是这样,这就足够了。
df.index[df.index.str[0].notna()]
Index(['a'], dtype='object')
假设您有字符串条目,任何不是字符串的内容都将显示为 NaN。
如果您想去除无效数据,请尝试将其强制浮动,并去除 NaN 行。
m = pd.to_numeric(df.index, errors='coerce').notna() #.notnull()
df[m]
a b
0.0 1 4
1.5 2 5
使用列表理解 - 根据 Coldspeeds 推荐更新:
[x for x in df.index if not isinstance(x, float)]
您可以使用 collections.defaultdict
创建映射到值的类型字典:
from collections import defaultdict
df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [4,5,6,7,8]},
index=[0.0,1.5,'a',pd.to_datetime('10/05/2018'),'b'])
vals = pd.to_numeric(df.index, errors='coerce')
idx = df.index[vals.isnull()]
d = defaultdict(list)
for x in idx:
d[type(x)].append(x)
然后,例如,您可以使用 d.keys()
提取所有非数字类型,或 d[str]
提取字符串索引。
结果
print(d)
defaultdict(list,
{str: ['a', 'b'],
pandas._libs.tslibs.timestamps.Timestamp: [Timestamp('2018-10-05 00:00:00')]})
我正在使用预计仅包含浮点类型索引值的 DataFrame,但我怀疑由于某种原因存在不同类型的值,导致索引的类型为 dtype='object'
。我想提取非浮点类型的索引值,看看是否是这种情况。
示例
df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]}, index=[0.0,1.5,'a'])
在这种情况下提取的结果将是一个包含单个元素的列表 ['a']
。
将 isinstance
与 map
一起使用:
idx = df.index[(df.index.map(lambda x: isinstance(x, float)) == False)]
print (idx)
Index(['a'], dtype='object')
您是否只想要一种方法来确定您拥有哪种虚假数据?如果是这样,这就足够了。
df.index[df.index.str[0].notna()]
Index(['a'], dtype='object')
假设您有字符串条目,任何不是字符串的内容都将显示为 NaN。
如果您想去除无效数据,请尝试将其强制浮动,并去除 NaN 行。
m = pd.to_numeric(df.index, errors='coerce').notna() #.notnull()
df[m]
a b
0.0 1 4
1.5 2 5
使用列表理解 - 根据 Coldspeeds 推荐更新:
[x for x in df.index if not isinstance(x, float)]
您可以使用 collections.defaultdict
创建映射到值的类型字典:
from collections import defaultdict
df = pd.DataFrame({'a': [1,2,3,4,5], 'b': [4,5,6,7,8]},
index=[0.0,1.5,'a',pd.to_datetime('10/05/2018'),'b'])
vals = pd.to_numeric(df.index, errors='coerce')
idx = df.index[vals.isnull()]
d = defaultdict(list)
for x in idx:
d[type(x)].append(x)
然后,例如,您可以使用 d.keys()
提取所有非数字类型,或 d[str]
提取字符串索引。
结果
print(d)
defaultdict(list,
{str: ['a', 'b'],
pandas._libs.tslibs.timestamps.Timestamp: [Timestamp('2018-10-05 00:00:00')]})