Преобразовать формат структуры в CSV в два столбца - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть данные в CSV-файле следующего формата (один столбец в dataframe). По сути, это похоже на схему в документе Word, где заголовки, которые я здесь показал, это буквы - это главные заголовки, а элементы в виде чисел - это подзаголовки:

  • A
  • 1
  • 2
  • 3
  • B
  • 1
  • 2
  • C
  • 1
  • 2
  • 3
  • 4

Я хочу преобразовать это в следующий формат (два столбца в dataframe):

  • A 1
  • A 2
  • A 3
  • B 1
  • B 2
  • C 1
  • C 2
  • C 3
  • C 4

Я использую pandas read_csv для преобразования данных в dataframe, и я пытаюсь переформатировать циклы, но у меня возникают трудности, потому что данные повторяются и перезаписываются. Например, A 3 будет перезаписано с C 3 (что приведет к двум экземплярам C 3, когда требуется только один, и потеряет A 3 в целом) позже в цикле. Какой лучший способ сделать это?

Извините за плохое форматирование, новинка для сайта.

1 Ответ

0 голосов
/ 10 сентября 2018

Использование:

#if no csv header use names parameter
df = pd.read_csv(file, names=['col'])

df.insert(0, 'a', df['col'].mask(df['col'].str.isnumeric()).ffill())

df = df[df['a'] != df['col']]
print (df)
    a col
1   A   1
2   A   2
3   A   3
5   B   1
6   B   2
8   C   1
9   C   2
10  C   3
11  C   4

Детали

Проверка isnumeric значения:

print (df['col'].str.isnumeric())
0     False
1      True
2      True
3      True
4     False
5      True
6      True
7     False
8      True
9      True
10     True
11     True
Name: col, dtype: bool

Заменить True на NaN s на mask и пропустить пропущенные значения:

print (df['col'].mask(df['col'].str.isnumeric()).ffill())
0     A
1     A
2     A
3     A
4     B
5     B
6     B
7     C
8     C
9     C
10    C
11    C
Name: col, dtype: object

Добавить новый столбец в первую позицию на DataFrame.insert:

df.insert(0, 'a', df['col'].mask(df['col'].str.isnumeric()).ffill())
print (df)
    a col
0   A   A
1   A   1
2   A   2
3   A   3
4   B   B
5   B   1
6   B   2
7   C   C
8   C   1
9   C   2
10  C   3
11  C   4

и последнее удаление строк с одинаковыми значениями на boolean indexing.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...