Python熊猫阅读

时间:2020-06-11 05:19:16

标签: python pandas

我正在尝试读取一个大的日志文件,该文件已使用不同的定界符(旧式更改)进行了解析。

此代码有效

import os, subprocess, time, re
import pandas as pd

for root, dirs, files in os.walk('.', topdown=True):
    for file in files:
        df = pd.read_csv(file, sep='[,|;: \t]+', header=None, engine='python', skipinitialspace=True)

        for index, row in df.iterrows():
            print(row[0], row[1])

此方法适用于以下数据

user1@email.com address1
user2@email.com;address2
user3@email.com,address3
user4@email.com;;address4
user5@email.com,,address5

问题1::输入文件中的以下行将破坏代码。我希望将其解析为2列(而不是3列)

user6@email.com,,address;6

问题2:我希望替换地址中所有的单引号和双引号,但以下两种方法似乎都不起作用。

df[1]=df[1].str.replace('"','DQUOTES')
df.replace('"', 'DQUOTES', regex=True)

请帮助!

1 个答案:

答案 0 :(得分:0)

您可以先将文件读入一列,然后在熊猫中逐步进行处理:

  • 分为两列(n=1
  • 替换引号
  • 如果需要(即,如果您可能不需要其他列),请再次拆分地址列,并仅使用第一列([0])(在此处您可能要从列表中删除空格分隔符)。如果地址中包含逗号和分号等,那么您当然不需要此步骤。


import io
s= """user1@email.com address1
user2@email.com;address2
user3@email.com,address3
user4@email.com;;address4
user5@email.com,,address5
user6@email.com,,address;6
user6@email.com,,address with "double quotes"
user6@email.com,,address with 'single quotes'
"""
df = pd.read_csv(io.StringIO(s), sep='\n', header=None)

df = df[0].str.split('[,|;: \t]+', 1, expand=True).rename(columns={0: 'email', 1: 'address'})
df.address = df.address.str.replace('\'|"', 'DQUOTES')
df.address = df.address.str.split('[,|;:]+', 1, expand=True)[0]  #depending on what you need

结果:

             email                                   address
0  user1@email.com                                  address1
1  user2@email.com                                  address2
2  user3@email.com                                  address3
3  user4@email.com                                  address4
4  user5@email.com                                  address5
5  user6@email.com                                   address
6  user6@email.com  address with DQUOTESdouble quotesDQUOTES
7  user6@email.com  address with DQUOTESsingle quotesDQUOTES