[英]Python - read a file and append it to a Dataframe line by line
我可以使用Python讀取文件,然后將每一行的數據直接附加到Pandas數據框嗎?
我要解析的數據包含在電子郵件的正文中:
我嘗試使用RegEx
捕獲以下數據:
種類 : GB EAST cod, GB blackback
等
行業 : NEFS 5
磅 : 954, 30,000
等
價格 : $0.83, $0.07
等
和日期 : 09/01/2014
但是事實證明很難捕捉到所有這些...
我可以很容易地獲得Date,因為它總是在Sent:
之后出現Sent:
我使用RegEx在Sent:
之后捕獲所有內容Sent:
然后使用dateutil
捕獲日期。
該部門也很容易,我只是讓RegEx搜索20個扇區之一,如果看到其中一個捕獲了它。
但是捕獲種類,磅數和價格數據,並確保它們正確對齊,然后將它們整齊地放入數據框中,這才是我所堅持的。 因此,我現在的想法是只捕獲電子郵件正文中的每一行,然后將捕獲的內容分解為數據框的不同列。
我知道這不是最干凈的捕獲,但是我寧願獲取太多數據,而只是稍后手動刪除一些數據而不要獲取不足的數據。
所以我的問題是:我可以使用Python讀取文件並將讀取的所有內容傳輸到Pandas數據框中嗎?
是的,一旦文件中包含數據,就可以使用pandas.read_csv('filename.csv')。 有關詳細信息,請檢查pandas.read_csv 。
一旦將其放入文本文件,我便會讀取電子郵件中的“魚”部分,這是一項過分具體的功能。 假設您已經撤消了日期和部門。
它可能不適用於您的實現,但是希望使用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相結合。 但是逐行添加新條目會比較慢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.