基本上无法读取单个csv文件的所有内容。 csv文件的前几行包含7列,文件的其余各行包含13列。我可以在不同的时间分别阅读它们,但是我想知道是否可以同时阅读它们。 csv文件的一些照片; (注意:您可以忽略为第一个数据帧创建的nan,不需要它们(仅使用第一行),我在这里仅显示了它们的完整概述)
现在,我已经尝试过两次使用熊猫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
答案 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