【问题标题】:How to Read .txt in Pandas如何在 Pandas 中读取 .txt
【发布时间】:2017-01-06 16:02:01
【问题描述】:

我正在尝试将包含两个系列数据的 txt 文件提取到 pandas 中。到目前为止,我已经尝试了以下变体,这些变体来自堆栈上的其他帖子。到目前为止,它只会作为一个系列阅读。

我使用的数据是可用的here

icdencoding = pd.read_table("data/icd10cm_codes_2017.txt", delim_whitespace=True, header=None)
icdencoding = pd.read_table("data/icd10cm_codes_2017.txt", header=None, sep="/t")
icdencoding = pd.read_table("data/icd10cm_codes_2017.txt", header=None, delimiter=r"\s+")

我确定我做的事情很明显是错误的,但我看不到。

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    尝试使用sep=r'\s{2,}'作为分隔符 - 这意味着使用作为分隔符两个或更多的空格或制表符:

    In [28]: df = pd.read_csv(url, sep=r'\s{2,}', engine='python', header=None, names=['ID','Name'])
    
    In [29]: df
    Out[29]:
            ID                                                Name
    0     A000  Cholera due to Vibrio cholerae 01, biovar cholerae
    1     A001     Cholera due to Vibrio cholerae 01, biovar eltor
    2     A009                                Cholera, unspecified
    3    A0100                          Typhoid fever, unspecified
    4    A0101                                  Typhoid meningitis
    5    A0102                Typhoid fever with heart involvement
    6    A0103                                   Typhoid pneumonia
    7    A0104                                   Typhoid arthritis
    8    A0105                               Typhoid osteomyelitis
    9    A0109              Typhoid fever with other complications
    10    A011                                 Paratyphoid fever A
    11    A012                                 Paratyphoid fever B
    12    A013                                 Paratyphoid fever C
    13    A014                      Paratyphoid fever, unspecified
    14    A020                                Salmonella enteritis
    15    A021                                   Salmonella sepsis
    16   A0220         Localized salmonella infection, unspecified
    17   A0221                               Salmonella meningitis
    18   A0222                                Salmonella pneumonia
    19   A0223                                Salmonella arthritis
    20   A0224                            Salmonella osteomyelitis
    21   A0225                           Salmonella pyelonephritis
    22   A0229           Salmonella with other localized infection
    23    A028               Other specified salmonella infections
    24    A029                   Salmonella infection, unspecified
    ..     ...                                                 ...
    671   B188                       Other chronic viral hepatitis
    672   B189                Chronic viral hepatitis, unspecified
    673   B190       Unspecified viral hepatitis with hepatic coma
    674  B1910  Unspecified viral hepatitis B without hepatic coma
    675  B1911     Unspecified viral hepatitis B with hepatic coma
    676  B1920  Unspecified viral hepatitis C without hepatic coma
    677  B1921     Unspecified viral hepatitis C with hepatic coma
    678   B199    Unspecified viral hepatitis without hepatic coma
    679    B20          Human immunodeficiency virus [HIV] disease
    680   B250                         Cytomegaloviral pneumonitis
    681   B251                           Cytomegaloviral hepatitis
    682   B252                        Cytomegaloviral pancreatitis
    683   B258                      Other cytomegaloviral diseases
    684   B259                Cytomegaloviral disease, unspecified
    685   B260                                      Mumps orchitis
    686   B261                                    Mumps meningitis
    687   B262                                  Mumps encephalitis
    688   B263                                  Mumps pancreatitis
    689  B2681                                     Mumps hepatitis
    690  B2682                                   Mumps myocarditis
    691  B2683                                     Mumps nephritis
    692  B2684                                Mumps polyneuropathy
    693  B2685                                     Mumps arthritis
    694  B2689                           Other mumps complications
    695   B269                          Mumps without complication
    
    [696 rows x 2 columns]
    

    您也可以使用read_fwf() 方法

    【讨论】:

    • 您能解释一下sep=r'\s{2,}', engine='python' 参数吗?我从未使用r'\s{2,} 作为分隔符或定义engine,如engine='python' 中所述。
    • 无法使用第一个选项,但使用带有标题和名称的 read_fwf()。它现在正在工作。 read_fwf() 对我来说是全新的。需要阅读它。
    • 感谢您解释 sep=r'\s{2,}'。真的很有用!
    • ``` sep=r'\s{2,}' ``` 正是我所需要的。谢谢!
    【解决方案2】:

    你的文件是一个固定宽度的文件,所以你可以使用read_fwf,这里的默认参数可以推断列宽:

    In [106]:
    df = pd.read_fwf(r'icd10cm_codes_2017.txt', header=None)
    df.head()
    
    Out[106]:
           0                                                  1
    0   A000  Cholera due to Vibrio cholerae 01, biovar chol...
    1   A001    Cholera due to Vibrio cholerae 01, biovar eltor
    2   A009                               Cholera, unspecified
    3  A0100                         Typhoid fever, unspecified
    4  A0101                                 Typhoid meningitis
    

    如果您知道列名的名称,您可以将这些名称传递给read_fwf

    In [107]:
    df = pd.read_fwf(r'C:\Users\alanwo\Downloads\icd10cm_codes_2017.txt', header=None, names=['col1', 'col2'])
    df.head()
    
    Out[107]:
        col1                                               col2
    0   A000  Cholera due to Vibrio cholerae 01, biovar chol...
    1   A001    Cholera due to Vibrio cholerae 01, biovar eltor
    2   A009                               Cholera, unspecified
    3  A0100                         Typhoid fever, unspecified
    4  A0101                                 Typhoid meningitis
    

    或者只是在读取后覆盖columns属性:

    df.columns = ['col1', 'col2']
    

    至于您尝试失败的原因,read_table 使用制表符作为默认分隔符,但文件只有空格且宽度固定

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      相关资源
      最近更新 更多