Как конвертировать заголовок в новый столбец - PullRequest
0 голосов
/ 16 февраля 2020

Я работаю с pandas и пытаюсь преобразовать строку заголовка информационного кадра в столбец, я пробовал функцию stack (), но, похоже, у меня не работает.

У меня есть файл, который содержит следующие данные, он имеет двойной заголовок - дата и температура (мин. И макс.)

      2/16/2020  2/16/2020   2/17/2020   2/17/2020   2/18/2020  2/18/2020   ......
         Min        Max         Min         Max         Min        Max
Paris    44         61          41          52          39         47
Berlin   47         59          42          52          41         45
Milan    46         64          40          46          37         44
.
.
.

Ожидаемый результат:

City    MIN MAX Date
Paris   44  61  2/16/2020
Paris   41  52  2/17/2020
Paris   39  47  2/18/2020
Berlin  47  59  2/16/2020
Berlin  42  52  2/17/2020
Berlin  41  45  2/18/2020
Milan   46  64  2/16/2020
Milan   40  46  2/17/2020
Milan   37  44  2/18/2020

Я пытался используйте df= pd.read_csv(StringIO(csv.text), header=[1]), чтобы выбрать в качестве заголовка вторую строку, но как задать только город, минимальное, максимальное значение и создать «дату» для нового столбца?

Я благодарен, если вы можете мне помочь.

Приветствия,

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

Я читаю ваш вопрос как попытку прочитать фрейм данных, а затем сложить столбцы, чтобы получить желаемый результат. Предположим, у вас есть файл data.csv, который выглядит следующим образом:

        2/16/2020  2/16/2020   2/17/2020   2/17/2020   2/18/2020  2/18/2020
        Min        Max         Min         Max         Min        Max
Paris    44         61          41          52          39         47
Berlin   47         59          42          52          41         45
Milan    46         64          40          46          37         44

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

# Read the headers on the first 2 lines
header = pd.read_csv('data.csv', sep='\\s+', nrows=2, header=None)

# There are 7 columns but only 6 headers
# We have to manually create the missing one
header.insert(0, 'City', 'City')

# Make a MultiIndex containing the names of the 7 columns
names = pd.MultiIndex.from_frame(header.T)

# Now read the data
df = pd.read_csv('data.csv', sep='\\s+', names=names, skiprows=2)

# Then the transformation
final = df.set_index(('City', 'City')) \
    .stack(0) \
    .rename_axis(['City', 'Date']) \
    .reset_index()
0 голосов
/ 16 февраля 2020

Вы можете сделать:

Считайте ваши данные, как показано, и преобразуйте. предположим, что ваши данные названы my_data.csv

df = pd.read_csv('my_data.csv',sep = '\\s+',header = [0,1])
df.stack(0).rename_axis(['City','Date']).reset_index()
Out: 
     City       Date  Max  Min
0   Paris  2/16/2020   61   44
1   Paris  2/17/2020   52   41
2   Paris  2/18/2020   47   39
3  Berlin  2/16/2020   59   47
4  Berlin  2/17/2020   52   42
5  Berlin  2/18/2020   45   41
6   Milan  2/16/2020   64   46
7   Milan  2/17/2020   46   40
8   Milan  2/18/2020   44   37
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...