Size: a a a

Python для анализа данных

2021 October 28

h

helby in Python для анализа данных
df['new'] = numpy.where(df['Time'].astype(str).str.contains('1980')==True, 1,0)
df = df[df['new']==1]
источник

VM

Valerii Mamontov in Python для анализа данных
Здравствуйте!
Решений много)) Я бы поступил следующим образом:
1. посмотрел бы тип данных в колонке (столбце)
2. если это строка (object), то привёл бы к типу datetime (создал дополнительный столбец)
3. создал бы новый столбец, в который скопировал только год
4. вывел все строки, где значение в новом столбце равно 1980

import pandas as pd

url = 'https://vk.com/doc207845555_611573740'
data = pd.read_csv(url, sep='\t')
# data.info() # у колонки date тип object
data['date_new'] = pd.to_datetime(data['date'])
data['year'] = data['date_new'].dt.year

data_1980 = data[data['year'] == 2016]
data_1980.head()
источник

h

helby in Python для анализа данных
Или можно так

df[df['Time'].dt.year=='1980']
источник

IS

Ilya Shutov in Python для анализа данных
Валерий, наконец то был задан правильный вопрос — "какой тип данных"?
Но даже в этом случае решение избыточно, не надо ничего преобразовать.
В случае со строкой можно просто искать "1980-" (даже без регулярок, чтобы быстрее).
В случае с датами, считать вхождения в [1980-01-01 00:00:00, 1981-01-01 00:00:00)

P.S. смотрю я на все эти упражнения с печалью. 100 тыс непонятных манипуляций, которые в R закрываются 15 символами, например (в случае строковых значений):
dt[str_detect(Time, "^1980")]
источник

@

@RAM@ in Python для анализа данных
+
источник

@

@RAM@ in Python для анализа данных
Вот кстати, насколько важно  и правильно использовать в данном случае loc. Вопрос ко всем
источник

VM

Valerii Mamontov in Python для анализа данных
Илья, я в своём ответе преследовал несколько целей. Первая - дать решение. Вторая - показать, что при работе с типом datetime можно выделять сущности - год, например. Третья - то, что выделять сущности лучше в отдельные столбцы.
Я предполагал, что если стоит задача получить год, то вероятнее всего следующей задачей будет - получить месяц или день, или день недели.

Хочу поправиться - не преследовал цели, а попытался.
Они конечно выглядят неявно. Я не стал загромождать свой ответ подробными размышлениями. Старался избежать избыточности.
источник

IS

Ilya Shutov in Python для анализа данных
1. я как раз и говорю, что задан самый правильный вопрос — какой тип данных? Картинка то неинформативна.
2. Из года отнюдь не следует день или месяц, а декомпозиция unixtimestamp в даты — трудоемкая операция для машины.
3. Новые колонки — новый менеджмент памяти. Так она и утекает постепенно.
источник

АР

Александр Райков... in Python для анализа данных
В связи с чем merge по колонке может быть успешен, а join по ней же - сплошь nan?
источник

@

@RAM@ in Python для анализа данных
how=?
источник

АР

Александр Райков... in Python для анализа данных
Там что-то с int, я уже выгуглил
источник

АР

Александр Райков... in Python для анализа данных
Но мне гуглорешение до конца не помогло
источник

АЮ

Артём Юров🇷🇺... in Python для анализа данных
Столкнулся с pandas+matplotlib в первый раз в жизни. И у меня затык. Я хочу нарисовать отдельную столбцовую диаграмму для каждой строки датафрейма. В строке есть столбцы: "number, name, mean, max, min". Я хочу, чтобы чарт выглядел примерно так:
Название (значение ячейки из столбца "name" и итерируемой строки):
y - числовые значения
x - названия столбцов как "mean, max, min" с их значениями (в общем, обычная столбцовая диаграмма).

Я пытаюсь обойти свой датафрейм следующим образом:
for i in range(0, df.shape[0]):
   fig = plotter.figure(figsize=(6,4))
   df.plot.bar(df.iloc[i, :])
   plotter.savefig(plot_path)
   plotter.clf()

но на строке с df.plot.bar(df.iloc[i, :]) я получаю следующую ошибку:

KeyError: "None of [Index(['Schlafzimmer',            4.0,            4.0,   3.9563126389,\n         8.5629388885,   0.2745735113,     3.98786362,   8.5629388885,\n         0.2745735113,   3.9247616577,   8.5018853814,   0.3314942865],\n      dtype='object')] are in the [columns]"

если кто работал с pandas + matplotlib буду рад получить дельный совет
источник

K

Konstantin in Python для анализа данных
можно написать функцию для отрисовки диаграммы, отладить ее и потом через apply(axis=1) применить.

либо можно сделать из столбцовой строчную таблицу и просто применить функцию для отрисовки диаграммы для каждого столбца.  

еще можно попробовать посмотреть, нельзя ли передать сразу в исходном виде датафрейм с указанием, что у тебя одни и те же поля в столбцах. Кажется, можно это сделать, но тогда все значения могут оказаться на ожном графике
источник

АЮ

Артём Юров🇷🇺... in Python для анализа данных
да, вот изначально я и нашёл пример, как вы в последнем абзаце описали
источник

K

Konstantin in Python для анализа данных
источник

АЮ

Артём Юров🇷🇺... in Python для анализа данных
спасибо, почитаю)
источник
2021 October 29

IS

Ilya Shutov in Python для анализа данных
странно, что никто не подскажет
текстовое описание очень похоже на то, что называется boxplot для категориальных переменных.

но, раз уж нет ответа, то вот предложение в какую сторону смотреть:
- http://www.sthda.com/english/wiki/ggplot2-box-plot-quick-start-guide-r-software-and-data-visualization
- https://ggplot2.tidyverse.org/reference/geom_boxplot.html
- https://t-redactyl.io/blog/2016/04/creating-plots-in-r-using-ggplot2-part-10-boxplots.html

Можно и сюда:
- https://const-ae.github.io/ggsignif/
- https://ggplot2.tidyverse.org/reference/geom_violin.html
- https://github.com/erocoar/gghalves

Если совсем в прямом виде, то это похоже на geom_rect / geom_pointrange
- https://ggplot2.tidyverse.org/reference/geom_linerange.html
- https://github.com/rstudio/cheatsheets/blob/main/data-visualization.pdf
источник

I

Igor in Python для анализа данных
data = pd.DataFrame({
   'id':[1,2,3,4],
   '0%':[1,1,5,4],
   '25%':[10,20,15,10],
   '50%':[20,30,25,20],
   '75%':[40,45,55,38],
   '100%':[90,95,90,80],
})

plt.vlines(x=range(data.shape[0]), ymin=data['25%'].values, ymax=data['75%'].values,linewidth=10)
plt.vlines(x=range(data.shape[0]), ymin=data['0%'].values, ymax=data['25%'].values,linewidth=1)
plt.vlines(x=range(data.shape[0]), ymin=data['75%'].values, ymax=data['100%'].values,linewidth=1)
plt.plot(range(data.shape[0]), data['50%'].values, 'C0o',color='black')

plt.xticks(range(data.shape[0]),data['id'])
источник

I

Igor in Python для анализа данных
Не нужно здесь построчное выполнение)
источник