Drop str во фрейме данных - PullRequest
       1

Drop str во фрейме данных

0 голосов
/ 29 октября 2018

Я загружаю df из csv, который имеет бесконечные значения (или я так думаю). Я не хочу изменять файл CSV (так как они введены в мою программу)

Поэтому, когда я загружаю этот конкретный файл следующим образом:

blocked2 = pd.read_csv(file8, usecols=[1,2,3,4])
blocked2.columns = names1
blocked2.head(), blocked2.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 863708 entries, 0 to 863707
Data columns (total 4 columns):
Time     863708 non-null float64
LP       863708 non-null float64
HP       863708 non-null float64
Icomp    863708 non-null object
dtypes: float64(3), object(1)
memory usage: 26.4+ MB

Меня интересует колонка Icomp. Я попытался построить его и увидел проблему с определенными значениями str

plt.plot(blocked2.Icomp)
plt.show()
TypeError: 10.20147 is not a string

, что странно, потому что это столбец текущих значений (ампер), поэтому все они должны быть плавающими.

просматривая файлы csv, я нашел определенные значения, записанные в виде 24.12088000 Аризона Az

Итак, я взглянул на эти значения в загруженном фрейме данных и получил

15907
15.908
9.569441
15.00891
24.12088000
15908
15.909
9.574703
15.02067
*∞*
15909
15.910
9.574703
15.03243
*∞*
15910
15.911
9.574703
15.02067
*∞*

Я получил бесконечные значения, и они типа str. Мой вопрос: могу ли я в любом случае найти эти значения str и удалить их из кадра данных? Поскольку я получу много этих CSV-файлов, и бесконечные значения не могут быть в одной и той же позиции!

Заранее спасибо за помощь:)

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Вы можете преобразовать в числовые значения через pd.to_numeric. Затем используйте np.isfinite и pd.Series.notnull, чтобы отфильтровать не конечные или нечисловые данные соответственно. Вот демо:

s = pd.Series([32.32, -np.inf, 'inf', 'asdfa', -324.42, np.inf])

s = pd.to_numeric(s, errors='coerce')
s = s[np.isfinite(s) & s.notnull()]

0     32.32
4   -324.42
dtype: float64
0 голосов
/ 29 октября 2018

Вы можете сделать следующее;

Первый

blocked2.replace([np.inf, -np.inf], np.nan,inplace=True)

тогда

blocked2.fillna(0,inplace=True)

или

blocked2.dropna(inplace=True)

Я сам не запускал этот код, но что-то в этих строках должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...