Чтение файла в одну колонку с пандами

#python #pandas

Вопрос:

Я пытаюсь прочитать следующий файл в фрейм данных pandas :

 (dataA
0   
400 
2800
9200
5600
2000
8400
4800
1200
7600
4000
400
6800
)
(dataB
30
30
30
30
30
30
20
500
30
50
330
530
930
)
 

Цель состоит в том, чтобы иметь что-то подобное :

 dataA dataB
0     30
400   30
2800  30
9200  30
5600  30
2000  30
8400  20
4800  500
1200  30
7600  50
4000  330
400   530
6800  930
 

Я знаю, что это можно сделать, прочитав файл строка за строкой, но мне было интересно, есть ли простой способ, чтобы его прочитали панды (например, read_csv).
Это связано с тем, что существует множество файлов, подобных этому, и постобработка уже автоматизирована для такого типа данных.

Комментарии:

1. есть ли ( в данных ваш фактический фрейм данных?

2. Нет, это была опечатка.

Ответ №1:

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

Важно, чтобы вы прочитали свой файл с header=None

 df = pd.read_excel(...,header=None)

s = df[0].str.contains('(',regex=True)

df1 = df.set_index([s.cumsum(), df.groupby(s.cumsum()).cumcount()]).unstack(0)
#additional clean up
df1 = df1.replace('(|)','',regex=True).replace('',np.nan).dropna().droplevel(0,1)
 

 #setup columns.
df1.columns = df1.iloc[0]
df1 = df1.iloc[1:]



print(df1)
0  dataA dataB
1   0       30
2   400     30
3   2800    30
4   9200    30
5   5600    30
6   2000    30
7   8400    20
8   4800   500
9   1200    30
10  7600    50
11  4000   330
12   400   530
13  6800   930
 

Ответ №2:

Вам нужно создать фрейм данных из словаря списков:

  1. Импорт библиотеки панд:
      import pandas as pd
     
  2. Создайте словарь из своего списка:
     data = { 'dataA': [0,400 ,2800,9200,5600,2000,8400,4800,1200,7600,4000,400,6800],
         'dataB': [30,30,30,30,30,30,20,500,30,50,330,530,930]}
     
  3. Создайте свой фрейм данных:
      df = pd.DataFrame(data)
     
  4. Назовите свой фрейм данных:
      df
     

В целом, вы можете увидеть общий код:

 import pandas as pd
data = { 'dataA': [0,400 ,2800,9200,5600,2000,8400,4800,1200,7600,4000,400,6800],
        'dataB': [30,30,30,30,30,30,20,500,30,50,330,530,930]}
df = pd.DataFrame(data)
df
 

и результат будет:

     dataA   dataB
0   0       30
1   400     30
2   2800    30
3   9200    30
4   5600    30
5   2000    30
6   8400    20
7   4800    500
8   1200    30
9   7600    50
10  4000    330
11  400     530
12  6800    930
 
 

Если вы не хотите видеть количество строк в своем фрейме данных, добавьте этот код в конце:

 print(df.to_string(index=False))
 

Результатом будет:

  dataA  dataB
     0     30
   400     30
  2800     30
  9200     30
  5600     30
  2000     30
  8400     20
  4800    500
  1200     30
  7600     50
  4000    330
   400    530
  6800    930
 

Комментарии:

1. это вообще не отвечает на вопрос?

2. как вы думаете, почему мой ответ не отвечает на вопрос??

3. потому что это не отвечает на вопрос.. все, что вы сделали, это создали фрейм данных из списка и распечатали его?

4. Да, всякий раз, когда он/она хочет прочитать данные, определенно нужен файл данных, такой как csv, xlsx, или создать список данных для чтения данных, и поскольку он/она не ссылался ни на какие файлы, я создал список в словаре для доступа к данным.