Когда начинаешь использовать DataFrame, то возникают десятки "мелких вопросов. Как переименовать столбцы? Как изменить порядок столбцов (чтобы склеить таблицы)? Как фильтровать строки по содержанию ячеек? Как использовать для этого регулярные выражения? Типы столбцов? Вот пример команды для извлечения списка столбцов: "cols = list(df.columns.values) StringIO
Здесь есть и такие фишки, как команды считывание в DataFrame из буфера обмена, из ячейки Ipython ... И это приводит к размышлениям о том, что иногда проще скопипастить фрагмент прямо сюда в Notebook
pandas.DataFrame
DataFrame
Series
Pandas selecting data with specific conditions
how do I insert a column at a specific column index in pandas?
Python pandas, widen output display?
Renaming columns in pandas
Pandas read_csv column dtype
How to change the order of DataFrame columns?
change Pandas dataframe column order in place
Renaming columns in pandas
How to speed up pandas row filtering by string matching?
Pandas filter rows
How to filter the DataFrame rows of pandas by “within”/“in”?
How to filter rows in pandas by regex
Pandas selecting data with specific conditions
Selecting Pandas Columns by dtype
Pandas, to_csv () to a specific format
read_table with stringIO and messy file
Taking out bits of CSVs
Как отфильтровать строки Pandas selecting data with specific conditions
item storage
record paper
record laptop
record desktop
file laptop
file paper
file paper
record desktop
file desktop
>>> df[(df['item'] == 'record') & (df['storage'].isin(['laptop', 'desktop']))]
item storage
1 record laptop
2 record desktop
6 record desktop
import os
import pandas as pd
import numpy as np
DIRPATH = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/3aug2/'
COLNAMES_0_11 =['Model', 'Brandt', \
'2014y3', '2013y3', 'u1413y3', '1413y3', \
'2014m3', '2013m3', 'u1413m3', '1413m3', 'Datem']
.to_string()
.dtypes
df = pd.DataFrame(np.random.rand(10, 5))
df['mean'] = df.mean(1)
df
Надо обязательно проверять, как называются столбцы. Вот этой командой:
cols = list(df.columns.values)
cols
Теперь можно очень просто поменять порядок столбцов, задав список столбцов, однако, если хоть одно имя не совпадет, тововзникнет ошибка:¶
df_1 = df[['mean', 0L, 1L]]
df_1.tail(3)
####А можно ли поменять порядок, обращаясь по номерам столбцов?
df[0].head(3)
df[4,0].head(3) # выдает ошибку
Напомним, что такая запись вырезает строки, а не столбцы...
df[2:5]
Выше мы создали df_1 = df[['mean', 0L, 1L]], чтобы поменять имена столбцов достаточно их просто присвоить
df_1.columns = ['mean', 'a', 'b']
df_1.head(3)
Здесь примеры приводить не будем, лучше просмотреть ссылки... не только в заголовке, но и в начале поста. Они очень удачно подобраны.
Идея о том, чтобы выбрать только строки по фильтам для столбцов здесь реализована очень хорошо. Можно не только задавать несколько критериев (например, для сочетаний разных столбцов), но и использовать регулярные выражения.
isin() is ideal if you have a list of exact matches, but if you have a list of partial matches or substrings to look for, you can filter using the str.contains method and regular expressions.
For example, if we want to return a DataFrame where all of the stock IDs which begin with '600' and then are followed by any three digits:
>>> rpt[rpt['STK_ID'].StringIO(r'^600[0-9]{3}$')] # ^ means start of string
... STK_ID ... # [0-9]{3} means any three digits
... '600809' ... # $ means end of string
... '600141' ...
... '600329' ...
was wondering if there is an elegant and shorthand way in Pandas DataFrames to select columns by data type (dtype). i.e. Select only int64 columns from a DataFrame.
#To elaborate, something along the lines of
#df.select_columns(dtype=float64)
df.loc[:, df.dtypes == np.float64]
df.select_dtypes(include=[np.float64])
#Since 0.14.1 there's a select_dtypes method so you can do this more elegantly/generally.
In [11]: df = pd.DataFrame([[1, 2.2, 'three']], columns=['A', 'B', 'C'])
In [12]: df.select_dtypes(include=['int'])
Out[12]:
A
0 1
# To select all numeric types use the numpy dtype numpy.number
In [13]: df.select_dtypes(include=[np.number])
Out[13]:
A B
0 1 2.2
In [14]: df.select_dtypes(exclude=[object])
Out[14]:
A B
0 1 2.2
First off just to demonstrate that reading this in is fine:
pgtime pgstat age eet g2 grade gleason ploidy
1 6.1 0 64 2 10.26 2 4 diploid
2 9.4 0 62 1 NaN 3 8 aneuploid
3 5.2 1 59 2 9.99 3 7 diploid
4 3.2 1 62 2 3.57 2 4 diploid
5 1.9 1 64 2 22.56 4 8 tetraploid
6 4.8 0 69 1 6.14 3 7 diploid
7 5.8 0 75 2 13.69 2 NaN tetraploid
8 7.3 0 71 2 NaN 3 7 aneuploid
9 3.7 1 73 2 11.77 3 6 diploid
Как загрузить в DataFrame данные из буфера обмена? Скопируем то, что выше, и используем регулярное выражение. Это важная новость для меня. Можно использовать регулярные выражения при считывании данных.
df1 = pd.read_clipboard(sep= '\s+') #sep= '\s*' , delim_whitespace=True , error_bad_lines=False
Причем, работает вот этот простой вариант. Справа в комментарии то, что пришлось попробовать и убрать...
df1
df = pd.read_table(StringIO(raw),header=0,skiprows=2,sep=",", warn_bad_lines=False, error_bad_lines=False)
Пример чтения данных из ячейки notebook вместе с кавычками Escaped quotes in pandas read_csv¶
data = '''SEARCH_TERM,ACTUAL_URL
"bra tv bord","http://www.ikea.com/se/sv/catalog/categories/departments/living_room/10475/?se%7cps%7cnonbranded%7cvardagsrum%7cgoogle%7ctv_bord"
"tv p\xc3\xa5 hjul","http://www.ikea.com/se/sv/catalog/categories/departments/living_room/10475/?se%7cps%7cnonbranded%7cvardagsrum%7cgoogle%7ctv_bord"
"SLAGBORD, \\"Bergslagen\\", IKEA:s 1700-tals serie","http://www.ikea.com/se/sv/catalog/categories/departments/living_room/10475/?se%7cps%7cnonbranded%7cvardagsrum%7cgoogle%7ctv_bord"'''
from cStringIO import StringIO
Не забыть импортировать StringIO. Этот прием можно использовать чаще.
dfio = pd.read_csv(StringIO(data), escapechar='\\', encoding='utf-8')
dfio
При отладке и экспериментах важно видеть исходный текст? Или, когда нужно обработать единичный фрагмент и построить диаграмму. Так что простой копипаст очень заманчив.
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий