熊猫非索引过滤器的索引过滤器
我在csv文件中读取日期时间列,其中包含非日期时间文本的随机散布块(一次5个行,有时是一行中的多个块)。参阅下面的剪断的数据文件的一个例子:熊猫非索引过滤器的索引过滤器
日期,时间,次数,故障,电池 22分之12/ 2015,05:24.0,39615.0,0.0,6.42 22分之12/ 2015,05:25.0 ,39616.0,0.0,6.42 12/22/2015,05:26.0,39617.0,0.0,6.42 12/22/2015,05:27.0,39618.0,0.0,6.42 ,,,, Sonde STSO3275 ,,,, RMR ,,,, 默认站点,,,, X2CMBasicOpticsBurst ,,,, ,,,, 探空STSO3275 ,,,, RMR ,,,, 默认站点,,,, X2CMBasicOpticsBurst ,,,, 12/22/2015,19:57.0,39619。 0,0.0,6.42 12/22/2015,19:58.0,39620.0,0.0,6.42 12/22/2015,19:59.0,39621.0,0.0,6.42 12/22/2015,20:00.0,39622.0, 0.0,6.42 22分之12/ 2015,20:01.0,39623.0,0.0,6.42 22分之12/ 2015,20:02.0,39624.0,0.0,6.42
我可以读取从剪贴板并进入数据据帧如下:
df = pd.read_clipboard(sep=',')
我正在寻找一种方式来清理非日期格式的字符串的“日期”列转换为datetime指标之前。我曾尝试列转换为索引,然后到列表和过滤这样的:
df.index=df['Date']
df = df[~df.index.get_loc('RMR')]
df = df[~df.index.get_loc('Default Site')]
df = df[~df.index.get_loc('X2CMBasicOpticsBurst')]
df = df[~df.index.get_loc('Sonde STSO3275')]
df = df.dropna()
然后我可以解析日期和时间在一起,并使用最新解析工具得到适当的日期时间指数。 但是,文本字段的内容可能会更改,并且此方法看起来非常有限且非pythonic。
因此,我正在寻找一种更好,更灵活和动态的方法来自动跳过索引中的这些非日期字段,希望无需知道其内容的详细信息(例如,当空白时跳过4行块行遇到)。
在此先感谢。
好了,你可以使用to_datetime
df.loc[:, 'Date'] = pd.to_datetime(df.Date, errors='coerce')
元素不是一个日期将被转换NAT的 那么你可以将其删除。
df = df.dropna()
我认为你可以使用read_csv
与dropna
和to_datetime
:
import pandas as pd
import io
temp=u"""Date,Time,Count,Fault,Battery
12/22/2015,05:24.0,39615.0,0.0,6.42
12/22/2015,05:25.0,39616.0,0.0,6.42
12/22/2015,05:26.0,39617.0,0.0,6.42
12/22/2015,05:27.0,39618.0,0.0,6.42
,,,,
Sonde STSO3275,,,,
RMR,,,,
Default Site,,,,
X2CMBasicOpticsBurst,,,,
,,,,
Sonde STSO3275,,,,
RMR,,,,
Default Site,,,,
X2CMBasicOpticsBurst,,,,
12/22/2015,19:57.0,39619.0,0.0,6.42
12/22/2015,19:58.0,39620.0,0.0,6.42
12/22/2015,19:59.0,39621.0,0.0,6.42
12/22/2015,20:00.0,39622.0,0.0,6.42
12/22/2015,20:01.0,39623.0,0.0,6.42
12/22/2015,20:02.0,39624.0,0.0,6.42"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), parse_dates=[['Date','Time']])
df = df.dropna()
df['Date_Time'] = pd.to_datetime(df.Date_Time, format="%m/%d/%Y %H:%M.%S")
print df
Date_Time Count Fault Battery
0 2015-12-22 05:24:00 39615.0 0.0 6.42
1 2015-12-22 05:25:00 39616.0 0.0 6.42
2 2015-12-22 05:26:00 39617.0 0.0 6.42
3 2015-12-22 05:27:00 39618.0 0.0 6.42
14 2015-12-22 19:57:00 39619.0 0.0 6.42
15 2015-12-22 19:58:00 39620.0 0.0 6.42
16 2015-12-22 19:59:00 39621.0 0.0 6.42
17 2015-12-22 20:00:00 39622.0 0.0 6.42
18 2015-12-22 20:01:00 39623.0 0.0 6.42
19 2015-12-22 20:02:00 39624.0 0.0 6.42