簡體   English   中英

從單個 csv 文件中讀取兩個完整的不同數據幀

[英]Reading two Complete different dataframes from a single csv file

基本上無法讀取單個 csv 文件的所有內容。 csv 文件的前幾行包含 7 列。文件的其余部分包含 13 列。 我可以在不同的時間分別閱讀它們,但我想知道是否有一種方法可以同時閱讀它們。 csv文件的一些照片; 注意:您可以忽略為第一個數據幀創建的 nan,不需要它們(僅使用第一行),我只是在此處展示它們以獲得完整概述) 在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

現在,我已經嘗試使用 pandas read_csv兩次,但要么會出錯,要么無法正確讀取文件。 IE。 如果我首先使用 Pandas 讀取第一個數據幀,第二次讀取第二個數據幀時,它會跳過前幾行。 IE。 數據框將有一個“Date(NZST)”,它盯着 1940 年左右,而不是如圖所示的 1910 年。 例如。

df1 = pd.read_csv(file,skiprows = 2, nrows = 1, delimiter = '\t',header = None)
df2 = pd.read_csv(file,skiprows = 8,delimiter = '\t')

如果我反過來做,例如。 df2df1之前首先讀取,它會給出一個EmptyDataError: No columns to parse from file當我讀取df1EmptyDataError: No columns to parse from file

  • 我從錯誤中思考,因為它表明這可以修復(也許),如果我以某種方式重置閱讀器,但我一直在無休止地搜索,但似乎無法找到方法。

  • 我也想只閱讀 7 列,因為無論如何都不需要其他列,即; 下面的列都不起作用

cols = list(range(0,7))
cols = [0,1,2,3,4,5,6,7] 
df1 = pd.read_csv(file,skiprows = 2,delimiter = '\t',usecols=cols)

我的一些數據樣本; https://drive.google.com/drive/folders/15PwpWIh13tyOyzFUTiE9LgrxUMm-9gh6?usp=sharing

這是可能的,但如果默認情況下想要正確設置列types ,則更好/更簡單地在 Pandas 中讀取文件兩次 - 並非所有列都為字符串:

r = [0,1,3,4,5,6,7]
df2 = pd.read_csv(file,skiprows = r,  delimiter = '\t',header = None, names=range(13))
print (df2.head())
                   0           1           2        3            4        5   \
0     Woodhill Forest        1402      A64741  -36.749      174.431       30   
1             Station  Date(NZST)  Time(NZST)  Tmax(C)  Period(Hrs)  Tmin(C)   
2  -36.7490, 174.4310  1951 01 01       09:00        -            -     17.8   
3  -36.7490, 174.4310  1951 01 02       09:00     24.9           24     15.6   
4  -36.7490, 174.4310  1951 01 03       09:00     17.2           24     12.7   

            6         7            8         9          10           11    12  
0            G       NaN          NaN       NaN        NaN          NaN   NaN  
1  Period(Hrs)  Tgmin(C)  Period(Hrs)  Tmean(C)  RHmean(%)  Period(Hrs)  Freq  
2           24         -            -         -          -            -     D  
3           24         -            -         -          -            -     D  
4           24         -            -         -          -            -     D  

另一個解決方案應該是逐行讀取文件並為 2 個數據幀創建 2 個列表,但再次獲取所有字符串 - 需要將每列轉換為整數或浮點數,或者如有必要轉換為日期時間。


file = 'wgenf - 2019-04-20T204905.009.genform1_proc'
df1 = pd.read_csv(file,skiprows = 2, nrows = 1, delimiter = '\t',header = None)
df2 = pd.read_csv(file,skiprows = 8,delimiter = '\t', na_values=['-'])
print (df1.dtypes)
0     object
1      int64
2     object
3    float64
4    float64
5      int64
6     object
7    float64
dtype: object

print (df2.dtypes)
Station           object
Date(NZST)        object
Time(NZST)        object
Tmax(C)          float64
Period(Hrs)      float64
Tmin(C)          float64
Period(Hrs).1    float64
Tgmin(C)         float64
Period(Hrs).2    float64
Tmean(C)         float64
RHmean(%)        float64
Period(Hrs).3    float64
Freq              object
dtype: object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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