首页 > 解决方案 > 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)

请帮忙!

标签: pythonpandas

解决方案


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

  • 分成两列 ( 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

推荐阅读