Python - использование сохраненной строки для выбора ALL [duplicate]

Вы также можете создать общедоступное свойство.

// 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;
176
задан piRSquared 5 January 2017 в 00:03
поделиться

9 ответов

2017 Ответ - pandas 0.20: .ix устарел. Использовать .loc

См. устаревание в документах

.loc использует индексирование на основе меток для выбора строк и столбцов. Метки являются значениями индекса или столбцов. Нарезка с .loc включает последний элемент.

Предположим, что у нас есть DataFrame со следующими столбцами: 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
114
ответ дан Ted Petrou 16 August 2018 в 02:10
поделиться
  • 1
    если ваше использование применяется к лямбда-строке, как в: 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
  • 2
    Не должна ли первая строка кода быть df.loc [:, 'foo': 'ant']? В комментарии говорится «муравей». – DavidR 29 November 2017 в 22:32
  • 3
    Правильно @DavidRowthorn Спасибо за указание на то, что – Ted Petrou 30 November 2017 в 06:45
  • 4
    @TedPetrou не проблема, спасибо за полезный ответ! – DavidR 30 November 2017 в 19:15
  • 5
    .iloc следует использовать вместо .loc. Исправьте это, и я подниму его. – craned 30 June 2018 в 18:14

Вы можете срезать вдоль столбцов DataFrame, ссылаясь на имена каждого столбца в списке, например:

data = pandas.DataFrame(np.random.rand(10,5), columns = list('abcde'))
data_ab = data[list('ab')]
data_cde = data[list('cde')]
24
ответ дан Brendan Wood 16 August 2018 в 02:10
поделиться
  • 1
    Поэтому, если я хочу, чтобы все данные начинались с столбца «b», мне нужно найти индекс «b» в data.columns и делать данные [data.columns [1:]]? Это канонический способ работы? – cpa 19 May 2012 в 16:40
  • 2
    Вы хотите, чтобы вы выбрали все столбцы с 'b' и далее? – Brendan Wood 19 May 2012 в 17:19
  • 3
    Да или выбор всех столбцов в заданном диапазоне. – cpa 19 May 2012 в 22:56
  • 4
    Я довольно новичок в пандах, поэтому я не могу говорить о том, что считается каноническим. Я бы сделал это, как вы сказали, но используйте функцию 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')

, используя имена столбцов

>> titanic.loc[:,['sex','age','fare']]

, используя индексы столбца

>> titanic.iloc[:,[2,3,6]]

с использованием ix (старше версии Pandas & lt; .20)

>> titanic.ix[:,[‘sex’,’age’,’fare’]]

или

>> titanic.ix[:,[2,3,6]]

с использованием метода reindex

>> titanic.reindex(columns=['sex','age','fare'])
56
ответ дан jetpackdata.com 16 August 2018 в 02:10
поделиться

Индекс 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, если это необходимо.

142
ответ дан jpp 16 August 2018 в 02:10
поделиться
  • 1
    Осторожно, что диапазоны панд включают обе конечные точки, т. Е. >>>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
  • 2
    Несколько столбцов можно передать следующим образом df.ix[:,[0,3,4]] – user602599 11 April 2014 в 15:19
  • 3
    @Karmel: В вышеприведенном выводе выглядит ошибка копирования / вставки. Возможно, вы имели в виду df.ix[:,'b':'e']? – ChaimG 2 July 2015 в 04:38
  • 4
    Лучше использовать loc вместо ix: stackoverflow.com/a/31593712/4323 – John Zwinck 6 March 2017 в 09:12
  • 5
    Старые ответы, подобные этому, нужно удалить. .ix устарел и никогда не должен использоваться. – Ted Petrou 24 June 2017 в 11:57

Его эквивалент

 >>> print(df2.loc[140:160,['Relevance','Title']])
 >>> print(df2.ix[140:160,[3,7]])
0
ответ дан Max Kleiner 16 August 2018 в 02:10
поделиться

Также, учитывая DataFrame

data

, как в вашем примере, если вы хотите извлечь только столбцы 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
32
ответ дан moldovean 16 August 2018 в 02:10
поделиться

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

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
9
ответ дан Surya 16 August 2018 в 02:10
поделиться

И если вы пришли сюда для поиска двух диапазонов столбцов и объединения их друг с другом (например, я), вы можете сделать что-то вроде

op = df[list(df.columns[0:899]) + list(df.columns[3593:])]
print op

. Это создаст новый DataFrame с первым 900 столбцами и ( все) столбцы> 3593 (при условии, что в вашем наборе данных имеется около 4000 столбцов).

16
ответ дан user2023507 16 August 2018 в 02:10
поделиться

, если кадр 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

другие логические операторы

  1. logical_and (x1, x2, / [, out, where, ...]) Вычислить значение истинности x1 и x2 по элементам.
  2. logical_or (x1, x2, / [, out, where, casting, ...]) Вычислить значение истинности x1 OR x2 по элементам.
  3. logical_not (x, / [, out, where, casting, ...]) Вычислить значение истины NOT x по элементам.
  4. logical_xor (x1, x2, / [, out, where, ..]) Вычислить значение истины x1 XOR x2, по элементам.
0
ответ дан Vladimir Gavrysh 16 August 2018 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: