Создайте фрейм данных с pd.read_csv, но данные в столбце связаны - PullRequest
0 голосов
/ 05 января 2020

Следующие данные представляют собой небольшой фрагмент большого набора данных.

  -.976201  -.737468  -.338866  -.174108  -.388671  -.793479 -1.063547 -1.005576
  -.666256  -.254177   .018064   .069349  -.015640  -.090710  -.111850  -.194042
  -.486229  -.993744 -1.554215 -2.003795 -2.348716 -2.770146 -3.502312 -4.712848
 -6.401421 -8.300894 -9.896770-10.674380-10.444660 -9.438081 -8.065303 -6.594510

Что я по сути хочу сделать, это преобразовать данные в фрейм данных и добавить столбец времени, однако я запускаю в неприятности на последней строке в наборе как точки, соединенные дефисом. Это имеет место в нескольких строках набора данных, но я не могу понять, как решить эту проблему. В конце концов, я хочу построить данные и, следовательно, избавиться от dtype: object для столбца Motion. Фрейм данных, который он мне дает, показан на прилагаемой картинке, и это мой код: Печать фрейма данных

import numpy as np
import pandas as pd
time_range = np.arange(0, 500, 0.005)

motion_data = pd.read_csv('data.txt', header = None, sep = "\s+", names = range(0, 8, 1))
motion_frame = pd.DataFrame(motion_data)
motion_frame = motion_frame.stack(dropna=False).reset_index(drop=True).to_frame('Motion')
time = pd.DataFrame(time_range, index = None)
motion_frame['Time'] = time

motion_frame['Motion'].str.split('-', expand=True)
# motion_frame['Motion'].astype('float')

print(motion_frame)
motion_frame.dtypes

1 Ответ

2 голосов
/ 05 января 2020

Глядя на ваши данные, каждый столбец имеет ширину 10 символов. Если это правда, вы можете использовать метод pandas.read_fwf() и указать 'widths='.

Например:

import numpy as np
import pandas as pd

time_range = np.arange(0, 500, 0.005)

motion_data = pd.read_fwf('data.txt', widths=[10] * 8, names = range(0, 8, 1))
motion_frame = pd.DataFrame(motion_data)
motion_frame = motion_frame.stack(dropna=False).reset_index(drop=True).to_frame('Motion')
time = pd.DataFrame(time_range, index = None)
motion_frame['Time'] = time
motion_frame['Motion'] = motion_frame['Motion'].astype('float')

print(motion_frame)
print(motion_frame.dtypes)

Отпечатки:

       Motion   Time
0   -0.976201  0.000
1   -0.737468  0.005
...
30  -8.065303  0.150
31  -6.594510  0.155
Motion    float64
Time      float64
dtype: object
...