Time
基本上我有这个用熊猫读过的文件。我想做两件事。
我想将Time
标题存储为名为time的变量。其中最棘手的部分是每33行另一个数据块从当天数据的下一个10分钟开始。所以我想每33行我需要抓住4,607 rows
标题并将其存储为变量时间。
当我打印出文件的形状时,它会显示index
和1列。但是,我想将这个“一列文本”拆分为8列。 z
,speed
,dir
,w
,sigw
,bck
,error
,{{1}}。
我如何完成这两件事?
答案 0 :(得分:1)
pd.read_table(sep = '\s+', skiprows = np.arange(0 , 4607, 32))
如果不是这样,你必须手动删除它,所以你需要先将数据加载到单列
df = pd.read_table()
然后您需要通过执行以下操作来检测不需要的列
indices_to_remove = df.iloc[: , 0].str.contains('^\s*\d{4}\-\d{2}\-\d{2}')
然后只切片所需的列
df[~indices_to_remove]
然后最终创建你的最终dataframe
pd.DataFrame(list(df[~indices_to_remove].iloc[: , 0].str.split('\s+')))
答案 1 :(得分:0)
您应该从文件中删除2015-11-01 00:10:00 00:10:00
行,因为它会导致pandas
将其视为列标题,将下面的所有内容转储到具有该名称的列中。
答案 2 :(得分:0)
我认为如果每个第33行按日期填充,则需要按函数read_table
解析每32行。
然后过滤数据,因为数据标题在函数isin之间。
第二部分解析数据框df1
的日期。我按参数names
指定了三列,然后按Datetime
将日期时间解析为一列parse_dates
。
然后,数据按功能str.contains过滤到数据帧df1
。
所有索引都由函数reset_index重置。
import pandas as pd
import numpy as np
#parse data to dataframe df
df = pd.read_table('test/151101.mnd',
sep = '\s+',
header=None,
skiprows = np.arange(0 , 4608, 32),
names=['i','z','speed','dir','W','sigW','bck','error','tmp'],
usecols=['i','z','speed','dir','W','sigW','bck','error']
)
df = df[~df['W'].isin(['dir'])].reset_index(drop=True)
print df.head()
#parse date to df1
df1 = pd.read_table('test/151101.mnd',
sep = '\s+',
names=['d1','d2','d3'],
parse_dates={"Datetime" : [0, 1, 2]}
)
print df1.head()
df1 = df1[df1['Datetime'].str.contains(":")].reset_index(drop=True)
print df1.head()