我可以用Python读取文件,然后直接将每行的数据附加到Pandas数据帧吗?
我要解析的数据包含在电子邮件正文中:
我尝试使用RegEx
来捕获以下数据:
物种:GB EAST cod, GB blackback
等
部门:NEFS 5
磅:954, 30,000
等
价格:$0.83, $0.07
等
和日期:09/01/2014
但事实证明很难捕捉所有这些......
我可以轻松获得日期,因为它会始终显示在Sent:
后我使用RegEx捕获Sent:
之后的所有内容,然后dateutil
捕捉日期。
扇区也很容易,我只有RegEx搜索20个扇区中的一个,如果它看到其中一个捕获它。
但是捕捉物种,磅数和价格数据并确保它们正确排列,并将它们整齐地放入数据框中就是我被困住的地方。所以我现在的想法是只捕获电子邮件正文中的每一行,并将我捕获的内容分解为数据帧的不同列。
我知道这不是最干净的捕获,但我宁愿得到太多的数据,只需要稍后手动删除一些,而不是获得足够的数据。
所以我的问题是:用Python可以读取文件并将我读到的所有内容传输到Pandas数据帧中吗?
答案 0 :(得分:0)
是的,一旦文件中有数据,就可以使用pandas.read_csv('filename.csv')。查看pandas.read_csv了解详情。
答案 1 :(得分:0)
这是一个过于具体的功能,我将其用于阅读电子邮件的鱼段后,我将其放入文本文件中。它假设你已经取消了日期和行业。
它可能不适用于您的实现,但希望使用python字符串方法可以使您朝着正确的方向前进,并向您展示如何将其全部添加到DataFrame中。
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
你可以在那里做一些额外的步骤,将权重等转换为数字等。希望这有帮助!
另外一个步骤可能是将此与已存在的列已有的DataFrame相结合。但是逐行添加新条目会很慢(呃)。