Отбросьте строки Pandas DataFrame, содержащие строку из числа

У меня есть pandas DataFrame со столбцами

[Brand, CPL1, CPL4, Part Number, Calendar Year/Month, value, type]

Когда они выходят из StatsModels X13, они иногда имеют очень большие строковые представления целых чисел в значениях, которые не имеют смысла в их контексте, например:

[float(1.2), float(1.3), str("63478"), float(1.1)]

Как удалить строки, в которых это произошло? Поскольку они представляют собой строковые представления целых чисел, я не могу использовать их или какой-либо аналогичный метод.


person Jeremy Barnes    schedule 04.11.2016    source источник
comment
Каков источник данных? Каково происхождение дефектных столбцов (или строк в столбцах)? Некоторые конкретные образцы данных и / или кода могут помочь.   -  person John Zwinck    schedule 04.11.2016
comment
Источником является файл SAP Hana xls, который импортируется в DataFrame, сводит каждый номер детали к серии и выходит из statsmodels x13. Серия, которая выходит из x13, содержит эти неровности.   -  person Jeremy Barnes    schedule 04.11.2016


Ответы (1)


Вы можете использовать boolean indexing, проверяя, является ли type < a href = "https://stackoverflow.com/questions/1303243/how-to-find-out-if-a-python-object-is-a-string"> string:

DataFrame:

df = pd.DataFrame([[float(1.2), float(1.3), str("63478"), float(1.1)],
                  [float(1.2), float(1.3), float(1.1), str("63478")]]).T

print (df)
      0      1
0    1.2    1.2
1    1.3    1.3
2  63478    1.1
3    1.1  63478

print (df.applymap(lambda x: isinstance(x, str)))
       0      1
0  False  False
1  False  False
2   True  False
3  False   True

print (df.applymap(lambda x: isinstance(x, str)).any(axis=1))
0    False
1    False
2     True
3     True
dtype: bool

print (df[~df.applymap(lambda x: isinstance(x, str)).any(axis=1)])
     0    1
0  1.2  1.2
1  1.3  1.3

Серия:

s = pd.Series([float(1.2), float(1.3), str("63478"), float(1.1)])
print (s)
0      1.2
1      1.3
2    63478
3      1.1
dtype: object

print (s.apply(lambda x: isinstance(x, str)))
0    False
1    False
2     True
3    False
dtype: bool

print (s[~s.apply(lambda x: isinstance(x, str))])
0    1.2
1    1.3
3    1.1
dtype: object
person jezrael    schedule 04.11.2016