Python 为什么CSV文件会将第一列作为dtype64[ns]加载,而将txt作为对象加载

Python 为什么CSV文件会将第一列作为dtype64[ns]加载,而将txt作为对象加载,python,pandas,Python,Pandas,多亏了这个论坛,我这里的其他人有了这个代码: names=['Date','Wind Speed','Wind Direction'] df2 = pd.read_csv('test_met.csv', index_col=0, names=names, parse_dates=[0]) aethalometer=['Date','Conc'] df1=pd.read_csv('BC_2012_1min.csv', index_col=0, names=aethalometer, parse_

多亏了这个论坛,我这里的其他人有了这个代码:

names=['Date','Wind Speed','Wind Direction']
df2 = pd.read_csv('test_met.csv', index_col=0, names=names, parse_dates=[0])

aethalometer=['Date','Conc']
df1=pd.read_csv('BC_2012_1min.csv', index_col=0, names=aethalometer, parse_dates=[0])
df1=df1[df1['Conc']>-10]

print(len(df1))

print("here")

df1.index = df1.index.to_period('h')
df2['per'] = df2.index.to_period('h')
pers = df2.loc[(df2['Wind Direction'] > 340) | (df2['Wind Direction'] < 12) , 'per'].unique()
在这种情况下,csv文件看起来像:(最初是一个文本文件,我将其重新保存为csv):

同时,如果我使用原始txt文件:我得到:

TypeError:仅对DatetimeIndex、TimedeltaIndex或 PeriodIndex,但获得了“Index”的实例

此时:df1.index看起来像:

Index([], dtype='object', name='Date')
01-mar-05 12:00,  22.7,  8.1, 0.0214, 1.3727, 0.0214, 1.6969, 1.00,30.603
01-mar-05 12:05, -11.7,  8.1, 0.0214, 1.3725, 0.0214, 1.6965, 1.00,30.5871
DatetimeIndex(['2005-03-01 12:00:00', '2005-03-01 12:10:00',
               '2005-03-01 12:15:00', '2005-03-01 12:20:00',
etc.

 '2005-03-03 12:00:00'],
              dtype='datetime64[ns]', name='Date', freq=None)

但当我使用另一个数据集时,它看起来像:

Index([], dtype='object', name='Date')
01-mar-05 12:00,  22.7,  8.1, 0.0214, 1.3727, 0.0214, 1.6969, 1.00,30.603
01-mar-05 12:05, -11.7,  8.1, 0.0214, 1.3725, 0.0214, 1.6965, 1.00,30.5871
DatetimeIndex(['2005-03-01 12:00:00', '2005-03-01 12:10:00',
               '2005-03-01 12:15:00', '2005-03-01 12:20:00',
etc.

 '2005-03-03 12:00:00'],
              dtype='datetime64[ns]', name='Date', freq=None)
它不仅运行程序,df1.index看起来像:

Index([], dtype='object', name='Date')
01-mar-05 12:00,  22.7,  8.1, 0.0214, 1.3727, 0.0214, 1.6969, 1.00,30.603
01-mar-05 12:05, -11.7,  8.1, 0.0214, 1.3725, 0.0214, 1.6965, 1.00,30.5871
DatetimeIndex(['2005-03-01 12:00:00', '2005-03-01 12:10:00',
               '2005-03-01 12:15:00', '2005-03-01 12:20:00',
etc.

 '2005-03-03 12:00:00'],
              dtype='datetime64[ns]', name='Date', freq=None)
那么,如何将第一个文件转换为txt或csv文件,以读取为datetime64[ns]格式

非常感谢

以下是指向原始文本文件的链接:我正在尝试使用该文件来获取代码:

但这给出了一种奇怪的格式: 因此,我进入excel并将其保存为csv…,可在此处找到:

第二个是我想用的。。但无济于事

将代码更改为:
aethalometer=['Date','Conc']
df1=pd.read\u csv('BC\u 2012\u 1min.txt',name=aethalometer,parse\u dates=True,skiprows=1,sep='\t')。设置索引('Date')
df1.index=df1.index.to\u期间('h')

现在打印为:

2012/9/30 23:58:00 12.40
2012/9/30 23:59:00 2.60

但是他说:
AttributeError:'Index'对象对\u period没有属性

而df1.index仍然是一个对象:

dtype='object',name='Date',length=491588)

尝试:
df1.index=pd.to\u datetime(df1.index)


但是这表示未知字符串格式

好的,您的文件看起来像是通过您创建它的任何方法生成的,您在以下行中重复了标题:

43202、87843、132482、174243、186697、231338、274539、319180、363821、407022、448389

例如:

2012/4/30 23:59:00  -16.00
TimeW_1min  CONC_1min
2012/8/1 00:00:00   15.10
因此,您可以做的是不要试图解析日期列并使用带有参数的
errors='concurve'
将其转换为\u datetime,这将把错误的行转换为
NaT
,然后您可以过滤出行并设置索引,并根据需要转换为
PeriodIndex

In [126]:
df = pd.read_csv(r'c:\data\BC_2012_1min.txt', sep='\t', names=['Date','Conc'], skiprows=1 )
df['Date'] = pd.to_datetime(df['Date'], errors='coerce')
df = df[df['Date'].notnull()].set_index('Date').to_period('h')
df.index

Out[126]:
PeriodIndex(['2012-04-01 00:00', '2012-04-01 00:00', '2012-04-01 00:00',
             '2012-04-01 00:00', '2012-04-01 00:00', '2012-04-01 00:00',
             '2012-04-01 00:00', '2012-04-01 00:00', '2012-04-01 00:00',
             '2012-04-01 00:00',
             ...
             '2012-09-30 23:00', '2012-09-30 23:00', '2012-09-30 23:00',
             '2012-09-30 23:00', '2012-09-30 23:00', '2012-09-30 23:00',
             '2012-09-30 23:00', '2012-09-30 23:00', '2012-09-30 23:00',
             '2012-09-30 23:00'],
            dtype='int64', name='Date', length=491577, freq='H')
因此,在您的情况下,将我的第一行更改为:

aethalometer=['Date','Conc']
df1=pd.read_csv('BC_2012_1min.csv', names=aethalometer, sep='\t', skiprows=1)

我删除了txt文件中的标题,但没有任何区别。这是一个突出的错误,因为您无法将字符串解析为datetime并将其指定为索引,您可以尝试以下操作:
df2=pd.read\u csv('test\u met.csv',names=names,parse\u dates=[0])。设置\u index('Date吗
KeyError:“Date”是我在尝试时得到的:
df1=pd.read\u csv('BC\u 2012\u 1min\u edited2.csv',index\u col=0,names=aethalometer,parse\u dates=[0])。set\u index('Date哦,它适用于df2而不是df1 btw。您的索引输出有点奇怪,它看起来像是将头解析为
df1
索引的第一个元素(['TimeW_1min','01/04/2012 00:00','01/04/2012 00:01',
你能发布原始数据或链接到实际的csv/txt文件吗原始数据太大了,放在这里有办法上传吗?只是注意到有空数据(excel时)在txt文件的第二列中,这是导致它出现问题的原因吗?如果是的话,你认为这能够处理Nan数据吗?这很好,但这会释放所有coonc数据我不明白,我正在显示索引转换的结果,如果你看
df
它在我打印时仍然有
Conc
列df['Conc']它显示为空,我做了df.to_csv文件(“djsdhj.csv”这只是标题…没有数据
Date,Conc
这个问题变得单调乏味,因为我不明白当我加载你的txt文件,而不是csv文件时,它使用的是我发布的代码,你能用更新的代码和
df.info()的输出编辑你的问题吗
对不起,这是tedius。我真的很感谢你的帮助。我重新运行了它,现在Conc列不再是空的。(但它以前是空的)没关系,一切看起来都很好。再次感谢你