Как я могу напечатать значения, превышающие X, в определенном столбце файла CSV? - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь взять столбец файла CSV и распечатать любое из чисел, которые больше стандартного отклонения x3.

import pandas as pd 
df = pd.read_csv('/Users/aaronhuang/Desktop/ffp/exfileDATA.csv', usecols=[1], header=0)
stand = round(df.std(), 2)
print(df)
conf = stand * 3
print(round(conf, 2))
for rogue in df:
if df <= conf:
    print(df) 

При запуске выдает:

 Magnitude 
0         19.472
1         19.445
2         19.484
3         19.157
4         19.376
...          ...
6096      19.063
6097      19.178
6098      19.386
6099      19.092
6100      19.191

[6101 rows x 1 columns]
Magnitude     0.42
dtype: float64
Traceback (most recent call last):
  File "/Users/aaronhuang/PycharmProjects/EXTTEst/Code sandbox.py", line 12, in <module>
    if df <= conf:
  File "/Users/aaronhuang/.conda/envs/EXTTEst/lib/python3.8/site- 
packages/pandas/core/generic.py", line 1478, in __nonzero__
    raise ValueError(
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), 
a.any() or a.all().

Process finished with exit code 1

Как это исправить? Спасибо

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Вам не хватает двух шагов и последней детали:

  1. Вы хотите выполнить оценку <= conf с помощью pd.Series, а не pd.DataFrame. Это источник конкретной ошибки, которую вы получаете. Предположим, что используемый вами столбец назван ‘Magnitude’, тогда оценка должна быть df[‘Magnitude’] <= conf’.
  2. Эта оценка не возвращает отфильтрованный DataFrame. Вместо этого он возвращает логический pd.Series - столбец данных, где каждый элемент в столбце имеет значение True или False в зависимости от того, как элемент в ’Magnitude’ оценивается в выражении <= conf. Мы можем использовать эту логическую серию в качестве индексатора для фактической фильтрации DataFrame, однако, чтобы получить желаемые результаты, поместив драгоценное выражение в синтаксис индексатора DataFrame: `df [df ['Magnitude'] <= conf] '</li>
  3. Наконец, чтобы распечатать эти отфильтрованные данные, просто поместите их все в команду print(). Окончательная форма:
print(df[df[‘Magnitude’] <= conf])
0 голосов
/ 26 мая 2020

присвойте z-значения фрейму данных, и проверка будет легкой.

df['zscore'] = (df['Magnitude'] - df['Magnitude'].mean())/df['Magnitude'].std(ddof=0)


df_outliers=df[df['zscore']>3]
for rogue in df_outliers:
    print(rogue) 

Или просто:

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