【问题标题】:Create data frame with pd.read_csv but data in column is connected使用 pd.read_csv 创建数据框,但列中的数据已连接
【发布时间】:2020-04-23 09:20:54
【问题描述】:

以下数据是大数据集的一小部分。

  -.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

我本质上想要做的是将数据转换为数据框并附加一个时间列,但是,我在集合的最后一行遇到了问题,因为点 a 由连字符连接。 数据集中的几行都是这种情况,但我不知道如何解决这个问题。最终,我想绘制数据,因此需要摆脱 dtype: 运动列的对象。 它给我的数据框显示在附加的图片中,这是我的代码: Dataframe print

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

【问题讨论】:

  • pd.read_csv 没有看到一些缺少值之间空格的数据的空格。
  • 在导入数据时,您可能会喜欢并修复数据,但我会确保在导入数据之前正确分隔数据。
  • @merit_2 有什么方法可以使用 python 来实现,因为我可以手动完成,因为我在每组中有超过 10k 点
  • 分隔符是制表符吗?
  • @ALollz 没有,3 个空格

标签: python pandas dataframe dataset data-conversion


【解决方案1】:

查看您的数据,每列有 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

【讨论】:

  • 非常好。如果您希望您的时间成为您的索引,我会添加 motion_frame.set_index('time', inplace=True) 。它在处理和重新采样时会派上用场。
猜你喜欢
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
相关资源
最近更新 更多