Список python для столбцов [duplicate]

Это уже ответ здесь .

Вставка кода фрагмента из ссылки для вашей ссылки.

myModule.config(['$httpProvider', function($httpProvider) {
    //initialize get if not there
    if (!$httpProvider.defaults.headers.get) {
        $httpProvider.defaults.headers.get = {};    
    }    

    // Answer edited to include suggestions from comments
    // because previous version of code introduced browser-related errors

    //disable IE ajax request caching
    $httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
    // extra
    $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
    $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
}]);

32
задан user2938093 18 February 2016 в 21:01
поделиться

3 ответа

Вы можете использовать конструктор DataFrame с lists, созданный путем преобразования в numpy array с помощью values с tolist :

import pandas as pd

d1 = {'teams': [['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG'],
                ['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG'],['SF', 'NYG']]}
df2 = pd.DataFrame(d1)
print (df2)
       teams
0  [SF, NYG]
1  [SF, NYG]
2  [SF, NYG]
3  [SF, NYG]
4  [SF, NYG]
5  [SF, NYG]
6  [SF, NYG]

df2[['team1','team2']] = pd.DataFrame(df2.teams.values.tolist(), index= df2.index)
print (df2)
       teams team1 team2
0  [SF, NYG]    SF   NYG
1  [SF, NYG]    SF   NYG
2  [SF, NYG]    SF   NYG
3  [SF, NYG]    SF   NYG
4  [SF, NYG]    SF   NYG
5  [SF, NYG]    SF   NYG
6  [SF, NYG]    SF   NYG

И для нового DataFrame:

df3 = pd.DataFrame(df2['teams'].values.tolist(), columns=['team1','team2'])
print (df3)
  team1 team2
0    SF   NYG
1    SF   NYG
2    SF   NYG
3    SF   NYG
4    SF   NYG
5    SF   NYG
6    SF   NYG

Решение с apply(pd.Series) очень медленно:

#7k rows
df2 = pd.concat([df2]*1000).reset_index(drop=True)

In [89]: %timeit df2['teams'].apply(pd.Series)
1 loop, best of 3: 1.15 s per loop

In [90]: %timeit pd.DataFrame(df2['teams'].values.tolist(), columns=['team1','team2'])
1000 loops, best of 3: 820 µs per loop
65
ответ дан jezrael 19 August 2018 в 00:18
поделиться
  • 1
    как насчет того, имеет ли место имя столбца, например «команда 1». Я попытался получить доступ к значению столбца таким образом df2 ['team 1'] , но он не работает. – Sherlock 9 July 2017 в 16:21
  • 2
    Я думаю, что это тоже хорошо. – jezrael 9 July 2017 в 16:21
  • 3
    Незначительное оговорку, если вы используете его на существующем фрейме данных, обязательно сбросьте индекс, иначе он будет неправильно назначен. – user1700890 6 November 2017 в 16:16
  • 4
    @ user1700890 - да или указать индекс в конструкторе DataFrame df2[['team1','team2']] = pd.DataFrame(df2.teams.values.tolist(), index= df2.index) – jezrael 6 November 2017 в 16:18
  • 5
    @Sherlock, как правило, это хорошая мера для изменения таких имен столбцов в любом случае;) – mikkokotila 9 January 2018 в 12:49

Более простое решение:

pd.DataFrame(df2.teams.tolist(), columns=['team1', 'team2'])

Выход,

  team1 team2
-------------
0    SF   NYG
1    SF   NYG
2    SF   NYG
3    SF   NYG
4    SF   NYG
5    SF   NYG
6    SF   NYG
7    SF   NYG

Если вы хотите разбить столбец с разделителями, а не на списки, вы также можете сделать следующее:

pd.DataFrame(df.teams.str.split('<delim>', expand=True).values,
             columns=['team1', 'team2'])
1
ответ дан Joseph Davison 19 August 2018 в 00:18
поделиться

Кажется, что синтаксически более простой способ и, следовательно, легче запомнить, в отличие от предлагаемых решений. Я предполагаю, что столбец называется «мета» в dataframe df:

df2 = pd.DataFrame(df['meta'].str.split().values.tolist())
3
ответ дан mikkokotila 19 August 2018 в 00:18
поделиться
  • 1
    У меня есть ошибка, но я разрешил ее, удалив str.split(). Это было намного проще и имеет преимущество, если вы не знаете количество элементов в своем списке. – otteheng 11 January 2018 в 17:29
Другие вопросы по тегам:

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