首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个行条目的数据拆分为2行-使用pandas读入

每个行条目的数据拆分为2行-使用pandas读入
EN

Stack Overflow用户
提问于 2017-02-24 19:57:34
回答 1查看 33关注 0票数 1

我正在处理一个数据集,其中每个“条目”被拆分到许多不同大小的行中,即

代码语言:javascript
复制
 yyyymmdd hhmmss     lat     lon   name       nprt depth ubas  udir cabs  cdir
        hs     tp     lp       theta     sp      wf
 20140701 000000 -76.500 208.000  'grid_point'  1  332.2  2.8 201.9 0.00   0.0
  0    0.10    1.48    3.40   183.19    30.16   0.89
  1    0.10    1.48    3.40   183.21    29.66   0.90
 20140701 000000 -74.500 251.000  'grid_point'  1    1.0  8.4 159.7 0.00   0.0
  0    0.63    4.24   28.02   105.05    32.71   0.85
  1    0.60    4.21   27.68   110.42    27.04   0.95
  2    0.20    5.78   52.18    43.73    17.98   0.01
  3    0.06    6.55   66.86   176.86    11.04   0.10
 20140701 000000 -74.500 258.000  'grid_point'  0    1.0  7.7 137.0 0.00   0.0
  0    0.00    0.00    0.00     0.00     0.00   0.00

我只对以日期开头的行感兴趣,因此可以丢弃其余的行。但是,附加行数在整个数据集中是不同的(有关示例,请参阅代码片段)。

理想情况下,我喜欢使用pandas read_csv,但如果不可能,我愿意接受建议/有更简单的方法。

所以我的问题是,如何将数据读入以日期开头的数据帧?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-24 20:24:47

您可以首先使用read_csv,然后尝试使用参数errors='coerce' - it添加NaT where not dates来转换第一列和第二列。因此最后需要使用由notnull创建boolean indexing和掩码来过滤行

代码语言:javascript
复制
import pandas as pd
from pandas.compat import StringIO

temp=u"""yyyymmdd hhmmss     lat     lon   name       nprt depth ubas  udir cabs  cdir
        hs     tp     lp       theta     sp      wf
 20140701 000000 -76.500 208.000  'grid_point'  1  332.2  2.8 201.9 0.00   0.0
  0    0.10    1.48    3.40   183.19    30.16   0.89
  1    0.10    1.48    3.40   183.21    29.66   0.90
 20140701 000000 -74.500 251.000  'grid_point'  1    1.0  8.4 159.7 0.00   0.0
  0    0.63    4.24   28.02   105.05    32.71   0.85
  1    0.60    4.21   27.68   110.42    27.04   0.95
  2    0.20    5.78   52.18    43.73    17.98   0.01
  3    0.06    6.55   66.86   176.86    11.04   0.10
 20140701 000000 -74.500 258.000  'grid_point'  0    1.0  7.7 137.0 0.00   0.0
  0    0.00    0.00    0.00     0.00     0.00   0.00"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), delim_whitespace=True)
代码语言:javascript
复制
print (pd.to_datetime(df.iloc[:,0] + df.iloc[:,1], errors='coerce', format='%Y%m%d%H%M%S'))
0           NaT
1    2014-07-01
2           NaT
3           NaT
4    2014-07-01
5           NaT
6           NaT
7           NaT
8           NaT
9    2014-07-01
10          NaT
dtype: datetime64[ns]

mask = pd.to_datetime(df.iloc[:,0] + 
                      df.iloc[:,1], errors='coerce', format='%Y%m%d%H%M%S')
         .notnull()
print (mask)
    print (mask)
0     False
1      True
2     False
3     False
4      True
5     False
6     False
7     False
8     False
9      True
10    False
dtype: bool
代码语言:javascript
复制
print (df[mask])

   yyyymmdd  hhmmss      lat      lon          name nprt  depth  ubas   udir  \
1  20140701  000000  -76.500  208.000  'grid_point'    1  332.2   2.8  201.9   
4  20140701  000000  -74.500  251.000  'grid_point'    1    1.0   8.4  159.7   
9  20140701  000000  -74.500  258.000  'grid_point'    0    1.0   7.7  137.0   

   cabs  cdir  
1   0.0   0.0  
4   0.0   0.0  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42438062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档