繁体   English   中英

Pandas 读取文件没有分隔符和不同的列宽

[英]Pandas read file with no delimiter and with different column widths

我想使用 pandas 读取纯文本文件。 我有没有分隔符和不同宽度的条目,如下所示:

59967Y98Doe John            6211100004545SO20140314-  00024278
N0546664SCHMIDT-PETER       7441100008300AW20140314-  00023643
G4894jmhTAKLONSKY-JUERGEN   4211100005000TB20140315   00023882
34875738PODESBERG-SCHUMPERTS6211100003671SO20140315   00024622
  • 1-8 是一个字符串。
  • 9-28 是一个字符串。
  • 29-31 是数字。
  • 32-34 是数字。
  • 35-41 是数字。
  • 42-43 是一个字符串。
  • 44-51 是一个日期 (yyyyMMdd)。
  • 52 是减号或空白
  • Rest 是不带小数点的货币金额(最后2位始终在小数点后)。 例如:- 00024278 = -242.78 €

我知道有pd.read_fwf

有一个参数width 我可以这样做:

pd.read_fwf(StringIO(txt), widths=[8], header="Peronal Nr.")

但是我怎样才能读取具有不同列宽的文件呢?

正如widths中的s所暗示的,您可以传递宽度列表:

pd.read_fwf(io.StringIO(txt), widths=[8,20,3,3,7,2,8,1,99], header=None)

output:

          0                     1    2    3     4   5         6    7      8
0  59967Y98              Doe John  621  110  4545  SO  20140314    -  24278
1  N0546664         SCHMIDT-PETER  744  110  8300  AW  20140314    -  23643
2  G4894jmh     TAKLONSKY-JUERGEN  421  110  5000  TB  20140315  NaN  23882
3  34875738  PODESBERG-SCHUMPERTS  621  110  3671  SO  20140315  NaN  24622

如果您想要名称和数据类型:

df = (pd.read_fwf(io.StringIO(txt), widths=[8,20,3,3,7,2,8,1,99], header=None,
                  names=['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'],
                  dtypes=[str, str, int, int, int, str, str, str, int])
        .assign(**{'G': lambda d: pd.to_datetime(d['G'], format='%Y%m%d')})
     )

output:

          A                     B    C    D     E   F          G    H      I
0  59967Y98              Doe John  621  110  4545  SO 2014-03-14    -  24278
1  N0546664         SCHMIDT-PETER  744  110  8300  AW 2014-03-14    -  23643
2  G4894jmh     TAKLONSKY-JUERGEN  421  110  5000  TB 2014-03-15  NaN  23882
3  34875738  PODESBERG-SCHUMPERTS  621  110  3671  SO 2014-03-15  NaN  24622

df.dtypes
A            object
B            object
C             int64
D             int64
E             int64
F            object
G    datetime64[ns]
H            object
I             int64
dtype: object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM