从单个csv文件读取两个完全不同的数据帧

时间:2019-04-20 11:26:00

标签: python pandas csv dataframe

基本上无法读取单个csv文件的所有内容。 csv文件的前几行包含7列,文件的其余各行包含13列。我可以在不同的时间分别阅读它们,但是我想知道是否可以同时阅读它们。 csv文件的一些照片; (注意:您可以忽略为第一个数据帧创建的nan,不需要它们(仅使用第一行),我在这里仅显示了它们的完整概述) enter image description here

enter image description here

enter image description here

现在,我已经尝试过两次使用熊猫read_csv,但是会给出错误消息,或者文件无法正确读取。即。如果我首先使用熊猫读取了第一个数据帧,则第二次读取了第二个数据帧时,它将跳过前几行。即。该数据框的“日期(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')

如果我反过来做,例如。首先在df2之前读取df1,当我阅读EmptyDataError: No columns to parse from file

时会给出df1
  • 我从错误中得到的提示是,如果我以某种方式重置了阅读器,则可以解决(也许)可以解决此问题,但是我一直在搜寻,但似乎找不到办法。

    < / li>
  • 我也只读取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

1 个答案:

答案 0 :(得分:1)

有可能,但是如果默认情况下要正确设置types列集-并非所有列都为字符串,则在熊猫中两次读取文件仍然更好/更简单:

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个DataFrame创建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