Python—读取文件并逐行将其附加到数据帧

Python—读取文件并逐行将其附加到数据帧,python,email,pandas,Python,Email,Pandas,我可以用Python读取一个文件,然后直接将每一行的数据附加到一个数据帧中吗 我要分析的数据包含在电子邮件正文中: 我尝试使用RegEx捕获以下数据: 物种:GB东鳕鱼、GB黑鳕鱼等 扇区:NEFS 5 英镑:954英镑、30000英镑等 价格:0.83美元、0.07美元等 以及日期:2014年1月9日 但事实证明很难捕捉到所有这些 我可以很容易地获取日期,因为它总是出现在发送后:我使用正则表达式捕获发送后的所有内容:,然后使用dateutil捕获日期 扇区也很简单,我只是让正则表达式搜索20

我可以用Python读取一个文件,然后直接将每一行的数据附加到一个数据帧中吗

我要分析的数据包含在电子邮件正文中:

我尝试使用
RegEx
捕获以下数据:

物种
GB东鳕鱼、GB黑鳕鱼等

扇区
NEFS 5

英镑
954英镑、30000英镑等

价格
0.83美元、0.07美元等

以及日期:
2014年1月9日

但事实证明很难捕捉到所有这些

我可以很容易地获取日期,因为它总是出现在
发送后:
我使用正则表达式捕获发送后的所有内容:
,然后使用
dateutil
捕获日期

扇区也很简单,我只是让正则表达式搜索20个扇区中的一个,如果它看到其中一个,就会捕获它

但是,捕获物种、磅数和价格数据并确保它们正确排列,并将它们整齐地放入数据框中,这是我的难题。因此,我现在的想法是捕获电子邮件正文中的每一行,并将捕获的内容拆分为数据帧的不同列

我知道这并不是最干净的捕获,但我宁愿获取太多的数据,而只是在以后手动删除一些数据,而不是获取不够的数据


所以我的问题是:使用Python,我可以读取文件并将读取的所有内容传输到Pandas数据帧吗?

是的,一旦文件中有数据,就可以使用Pandas.read\u csv('filename.csv')。查看详细信息。

这是我为阅读您电子邮件中的“鱼”部分(一旦我将其放入文本文件中)而设计的一个过于具体的功能。它假设您已经提取了日期和扇区

它可能并不完全适用于您的实现,但希望使用python字符串方法将使您朝着正确的方向前进,并向您展示如何将其全部添加到数据框架中

def fish_to_frame(fish_file, sector, date):
    # Initialize some lists
    species = []
    pounds = []
    prices = []
    date = pd.to_datetime(date, infer_datetime_format=True)
    with open(fish_file) as f:
        for line in f:
            # Fish: weight @ price
            fish, remainder = line.split(':')
            if '@' in remainder:
                weight, price = remainder.split('@')
            if 'trade' in remainder:
                weight, price = remainder.split('to ')
            weight = weight.strip(' lbs')
            species.append(fish)
            pounds.append(weight)
            prices.append(price)
    fish_frame = pd.DataFrame({'Species':species,
                              'Sector':sector,
                              'Pounds':pounds,
                              'Prices':prices,
                              'Date':date})
    return fish_frame
您可以在其中执行一些附加步骤,将权重等转换为数字等。希望这有帮助


另外一个步骤可能是将其与现有的数据帧和已经存在的列相结合。但是逐行添加新条目会很慢(er)。

您希望如何处理第二行(交易)?我认为对这些人来说最好的事情,以及我过去对其他数据文件所做的事情,就是将第二磅金额(1830磅的
交易
件)添加到数据帧的价格列中。他们要求的不是钱,而是其他的鱼。因此,将该值放在Price列中是有意义的,对吗?这产生了大量错误,都是由于
read\u csv
试图读取错误类型的参数。甚至在尝试读取文件路径、电子邮件页面本身、保存为txt文件的电子邮件页面、电子邮件的原始文本以及作为
str()
格式的电子邮件时也是如此。所以我不知道这是不是我最好的选择。
pd.read\u csv
是否像我希望的那样直接将数据读取到数据框中?它能将句子转换成数据表吗?因此,通读代码看起来应该可以完美地从电子邮件中捕获正确的片段,但不幸的是,它不能。它在第
fish,rements=line行上失败。拆分(“:”)
时出现错误
ValueError:太多的值无法解包(预期为2个)
。另一方面,过度具体正是我想写的内容:如果
循环查找20个扇区中的一个,查找带$符号的数字,寻找@等后面的数字。唯一的原因是如果有多个“:”可拆分。您的示例中没有任何具有多个冒号的示例,因此我不确定为什么会发生这种情况。尝试打印该行,而不是分配输出,然后查看它在其他行上拆分。Ohhh当我
print(f)
时,我得到
f:
。以前,当我遇到这个问题时,我不得不做另一行,上面写着
b=f.read
。让我试试编辑:它不起作用,现在它说
str对象没有属性“message\u from\u string”
,即使这一行在另一个脚本中工作得很好