簡體   English   中英

Python-讀取文件並將其逐行附加到Dataframe

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM