Вы также можете создать общедоступное свойство.
// Using and namespace...
public partial class FormOptions : Form
{
private string _MyString; // Use this
public string MyString { // in
get { return _MyString; } // .NET
} // 2.0
public string MyString { get; } // In .NET 3.0 or newer
// The rest of the form code
}
Затем вы можете получить его с помощью:
FormOptions formOptions = new FormOptions();
formOptions.ShowDialog();
string myString = formOptions.MyString;
.loc
использует индексирование на основе меток для выбора строк и столбцов. Метки являются значениями индекса или столбцов. Нарезка с .loc
включает последний элемент.
Предположим, что у нас есть DataFrame со следующими столбцами:
blockquote>foo
,bar
,quz
,ant
,cat
,sat
,dat
.# selects all rows and all columns beginning at 'foo' up to and including 'sat' df.loc[:, 'foo':'sat'] # foo bar quz ant cat sat
.loc
принимает ту же самую нотацию фрагментов, что и списки Python для строк и столбцов. Обозначение фрагмента:start:stop:step
# slice from 'foo' to 'cat' by every 2nd column df.loc[:, 'foo':'cat':2] # foo quz cat # slice from the beginning to 'bar' df.loc[:, :'bar'] # foo bar # slice from 'quz' to the end by 3 df.loc[:, 'quz'::3] # quz sat # attempt from 'sat' to 'bar' df.loc[:, 'sat':'bar'] # no columns returned # slice from 'sat' to 'bar' df.loc[:, 'sat':'bar':-1] sat cat ant quz bar # slice notation is syntatic sugar for the slice function # slice from 'quz' to the end by 2 with slice function df.loc[:, slice('quz',None, 2)] # quz cat dat # select specific columns with a list # select columns foo, bar and dat df.loc[:, ['foo','bar','dat']] # foo bar dat
Вы можете срезать по строкам и столбцам. Например, если у вас есть 5 строк с метками
v
,w
,x
,y
,z
# slice from 'w' to 'y' and 'foo' to 'ant' by 3 df.loc['w':'y', 'foo':'ant':3] # foo ant # w # x # y
Вы можете срезать вдоль столбцов DataFrame
, ссылаясь на имена каждого столбца в списке, например:
data = pandas.DataFrame(np.random.rand(10,5), columns = list('abcde'))
data_ab = data[list('ab')]
data_cde = data[list('cde')]
get_loc
на data.columns
, чтобы определить индекс столбца «b» или что-то еще.
– Brendan Wood
20 May 2012 в 03:12
Позволяет использовать титанический набор данных из пакета seaborn в качестве примера
# Load dataset (pip install seaborn)
>> import seaborn.apionly as sns
>> titanic = sns.load_dataset('titanic')
, используя имена столбцов
blockquote>>> titanic.loc[:,['sex','age','fare']]
, используя индексы столбца
blockquote>>> titanic.iloc[:,[2,3,6]]
с использованием ix (старше версии Pandas & lt; .20)
blockquote>>> titanic.ix[:,[‘sex’,’age’,’fare’]]
или
>> titanic.ix[:,[2,3,6]]
с использованием метода reindex
blockquote>>> titanic.reindex(columns=['sex','age','fare'])
Индекс DataFrame.ix - это то, к чему вы хотите получить доступ. Это немного запутанно (я согласен с тем, что индексирование Pandas иногда вызывает недоумение!), Но следующее, похоже, делает то, что вы хотите:
>>> df = DataFrame(np.random.rand(4,5), columns = list('abcde'))
>>> df.ix[:,'b':]
b c d e
0 0.418762 0.042369 0.869203 0.972314
1 0.991058 0.510228 0.594784 0.534366
2 0.407472 0.259811 0.396664 0.894202
3 0.726168 0.139531 0.324932 0.906575
где .ix [срез строки, срез столбца] - это то, что интерпретируется. Подробнее о индексе Pandas здесь: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-advanced
Примечание: .ix
был устарел с момента выпуска Pandas v0.20. Вместо этого вы должны использовать .loc
или .iloc
, если это необходимо.
>>>data.ix[:, 'a':'c'] a b c 0 0.859192 0.881433 0.843624 1 0.744979 0.427986 0.177159
– grasshopper
1 November 2013 в 15:02
df.ix[:,[0,3,4]]
– user602599
11 April 2014 в 15:19
df.ix[:,'b':'e']
?
– ChaimG
2 July 2015 в 04:38
loc
вместо ix
: stackoverflow.com/a/31593712/4323
– John Zwinck
6 March 2017 в 09:12
Его эквивалент
>>> print(df2.loc[140:160,['Relevance','Title']])
>>> print(df2.ix[140:160,[3,7]])
Также, учитывая DataFrame
data
blockquote>, как в вашем примере, если вы хотите извлечь только столбцы a и d (ei the 1st и 4-й столбец), iloc mothod из блока данных pandas - это то, что вам нужно, и его можно использовать очень эффективно. Все, что вам нужно знать, это индекс столбцов, которые вы хотите извлечь. Например:
>>> data.iloc[:,[0,3]]
даст вам
a d 0 0.883283 0.100975 1 0.614313 0.221731 2 0.438963 0.224361 3 0.466078 0.703347 4 0.955285 0.114033 5 0.268443 0.416996 6 0.613241 0.327548 7 0.370784 0.359159 8 0.692708 0.659410 9 0.806624 0.875476
Вот как вы могли бы использовать разные методы для выборочной сортировки столбцов, включая выборочную маркировку на основе меток, индексирование и разделение столбцов на основе выборочных диапазонов.
In [37]: import pandas as pd
In [38]: import numpy as np
In [43]: df = pd.DataFrame(np.random.rand(4,7), columns = list('abcdefg'))
In [44]: df
Out[44]:
a b c d e f g
0 0.409038 0.745497 0.890767 0.945890 0.014655 0.458070 0.786633
1 0.570642 0.181552 0.794599 0.036340 0.907011 0.655237 0.735268
2 0.568440 0.501638 0.186635 0.441445 0.703312 0.187447 0.604305
3 0.679125 0.642817 0.697628 0.391686 0.698381 0.936899 0.101806
In [45]: df.loc[:, ["a", "b", "c"]] ## label based selective column slicing
Out[45]:
a b c
0 0.409038 0.745497 0.890767
1 0.570642 0.181552 0.794599
2 0.568440 0.501638 0.186635
3 0.679125 0.642817 0.697628
In [46]: df.loc[:, "a":"c"] ## label based column ranges slicing
Out[46]:
a b c
0 0.409038 0.745497 0.890767
1 0.570642 0.181552 0.794599
2 0.568440 0.501638 0.186635
3 0.679125 0.642817 0.697628
In [47]: df.iloc[:, 0:3] ## index based column ranges slicing
Out[47]:
a b c
0 0.409038 0.745497 0.890767
1 0.570642 0.181552 0.794599
2 0.568440 0.501638 0.186635
3 0.679125 0.642817 0.697628
### with 2 different column ranges, index based slicing:
In [49]: df[df.columns[0:1].tolist() + df.columns[1:3].tolist()]
Out[49]:
a b c
0 0.409038 0.745497 0.890767
1 0.570642 0.181552 0.794599
2 0.568440 0.501638 0.186635
3 0.679125 0.642817 0.697628
И если вы пришли сюда для поиска двух диапазонов столбцов и объединения их друг с другом (например, я), вы можете сделать что-то вроде
op = df[list(df.columns[0:899]) + list(df.columns[3593:])]
print op
. Это создаст новый DataFrame с первым 900 столбцами и ( все) столбцы> 3593 (при условии, что в вашем наборе данных имеется около 4000 столбцов).
, если кадр Data выглядит так:
group name count
fruit apple 90
fruit banana 150
fruit orange 130
vegetable broccoli 80
vegetable kale 70
vegetable lettuce 125
и OUTPUT могут быть как
group name count
0 fruit apple 90
1 fruit banana 150
2 fruit orange 130
, если вы используете логический оператор np.logical_not
df[np.logical_not(df['group'] == 'vegetable')]
подробнее о
https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.logic.html
другие логические операторы
df['newcol'] = df.apply(lambda row: myfunc(row), axis=1)
, вы можете вmyfunc(row){
... использоватьrow['foo':'ant']
. например (в соответствии с этот ответ StackOverflow ), внутриmyfunc
вы можете оценить, если какая-либо из них не является числовой:row['foo':'ant'].apply(lambda x: isinstance(x, str)).any()
– pashute 8 November 2017 в 00:52.iloc
следует использовать вместо.loc
. Исправьте это, и я подниму его. – craned 30 June 2018 в 18:14