我正在使用从2018 KONA IRONMAN抓取的完成时间数据进行一些探索性数据分析。我使用JSON格式化数据,并使用熊猫将其读入csv。 'swim','bike','run'列的格式应为%HH:MM:SS,以便可操作,但是,我收到ValueError:(('Unknown string format:','-:-: -')。
let pingTimer = setInterval(ping, 100);
let pingUtilities = new PingUtilities();
function ping() {
let port = chrome.runtime.connect();
if (port) {
pingUtilities.checkTitleInLinkedIn();
pingUtilities.appendBookMarkInPing();
pingUtilities.checkCounter();
port.disconnect();
return;
}
clearInterval(pingTimer);
pingUtilities.onDisabled();
}
print(data.head(2)) print(kona.info()) print(kona.describe())
我应该如何使用pd.to_datetime正确设置'bike','swim','run'列的格式,并为将来使用而对这些列求和并附加“ Total Finish Time”列?谢谢!
答案 0 :(得分:0)
错误的原因是因为它无法从'-:-:-'中拉出时间。因此,您需要将所有这些都转换为“ 00:00:00”,但这意味着它们在0时间内完成了该事件。另一种选择是仅转换存在的时间,在没有时间的地方留空。当您转换为1900-01-01
时,其中还将包括日期datetime
。我放了.dt.time
,所以只有时间会显示。
timed_events = ['bike', 'swim', 'run']
for event in timed_events:
result[event] = pd.to_datetime(result[result[event] != '--:--:--'][event], format="%H:%M:%S").dt.time
问题是我记得您想对这些时间求和,这需要您做一些额外的转换。因此,我建议改用.to_timedelta()
。它将以相同的方式工作,因为您不需要包括--:--:--
。但是,您可以总结这些时间。我还添加了一列完成活动的数量,因此,如果您想按最佳时间进行排序,则可以过滤掉所有未参加所有三项比赛的人,因为显然他们会错过更好的比赛,因为他们错过了全部比赛事件:
关于以下内容的评论,我还将添加
:“您认为提供所有代码将有所帮助,但没有帮助。您 如果您保留代码,将获得更快,更有用的响应 至少可以复制您的问题。stackoverflow.com/ help / mcve – mad_“
我将给他带来疑问的好处,因为他看到了整个代码,而没有意识到您提供的代码是复制问题的最少代码,因为没有人愿意编写一种方法来生成可以使用的数据。有时您可以在问题中明确指出。
即:
以下是生成我的数据的代码:
CODE PART 1
import bs4
import pandas as pd
code...
但是现在我有了数据,这是我遇到麻烦的地方:
df = pd.to_timedelta()...
...
幸运的是,我记得在此之前为您提供了帮助,因此知道我可以回去获取该代码。因此,您最初使用的代码很好。
但这是我使用的完整代码,这与您最初使用的存储csv的方式不同。因此,您可以更改该部分,但是最后一部分是您需要的:
from bs4 import BeautifulSoup, Comment
from collections import defaultdict
import requests
import pandas as pd
sauce = 'http://m.ironman.com/triathlon/events/americas/ironman/world-championship/results.aspx'
r = requests.get(sauce)
data = r.text
soup = BeautifulSoup(data, 'html.parser')
def parse_table(soup):
result = defaultdict(list)
my_table = soup.find('tbody')
for node in my_table.children:
if isinstance(node, Comment):
# Get content and strip comment "<!--" and "-->"
# Wrap the rows in "table" tags as well.
data = '<table>{}</table>'.format(node[4:-3])
break
table = BeautifulSoup(data, 'html.parser')
for row in table.find_all('tr'):
name, _, swim, bike, run, div_rank, gender_rank, overall_rank = [col.text.strip() for col in row.find_all('td')[1:]]
result[name].append({
'div_rank': div_rank,
'gender_rank': gender_rank,
'overall_rank': overall_rank,
'swim': swim,
'bike': bike,
'run': run,
})
return result
jsonObj = parse_table(soup)
result = pd.DataFrame()
for k, v in jsonObj.items():
temp_df = pd.DataFrame.from_dict(v)
temp_df['name'] = k
result = result.append(temp_df)
result = result.reset_index(drop=True)
result.to_csv('C:/data.csv', index=False)
# However you read in your csv/dataframe, use the code below on it to get those times
timed_events = ['bike', 'swim', 'run']
for event in timed_events:
result[event] = pd.to_timedelta(result[result[event] != '--:--:--'][event])
result['total_events_participated'] = 3 - result.isnull().sum(axis=1)
result['total_times'] = result[timed_events].sum(axis=1)
输出:
print (result)
bike div_rank ... total_events_participated total_times
0 05:27:59 138 ... 3 11:20:06
1 05:17:51 151 ... 3 10:16:17
2 06:14:45 229 ... 3 14:48:28
3 05:13:56 162 ... 3 10:19:03
4 05:19:10 6 ... 3 09:51:48
5 04:32:26 25 ... 3 08:23:26
6 04:49:08 155 ... 3 10:16:16
7 04:50:10 216 ... 3 10:55:47
8 06:45:57 71 ... 3 13:50:28
9 05:24:33 178 ... 3 10:21:35
10 06:36:36 17 ... 3 14:36:59
11 NaT -- ... 0 00:00:00
12 04:55:29 100 ... 3 09:28:53
13 05:39:18 72 ... 3 11:44:40
14 04:40:41 -- ... 2 05:35:18
15 05:23:18 45 ... 3 10:55:27
16 05:15:10 3 ... 3 10:28:37
17 06:15:59 78 ... 3 11:47:24
18 NaT -- ... 0 00:00:00
19 07:11:19 69 ... 3 15:39:51
20 05:49:02 29 ... 3 10:32:36
21 06:45:48 4 ... 3 13:39:17
22 04:39:46 -- ... 2 05:48:38
23 06:03:01 3 ... 3 11:57:42
24 06:24:58 193 ... 3 13:52:57
25 05:07:42 116 ... 3 10:01:24
26 04:44:46 112 ... 3 09:29:22
27 04:46:06 55 ... 3 09:32:43
28 04:41:05 69 ... 3 09:31:32
29 05:27:55 68 ... 3 11:09:37
... ... ... ... ...
2442 NaT -- ... 0 00:00:00
2443 05:26:40 3 ... 3 11:28:53
2444 05:04:37 19 ... 3 10:27:13
2445 04:50:45 74 ... 3 09:15:14
2446 07:17:40 120 ... 3 14:46:05
2447 05:26:32 45 ... 3 10:50:48
2448 05:11:26 186 ... 3 10:26:00
2449 06:54:15 185 ... 3 14:05:16
2450 05:12:10 22 ... 3 11:21:37
2451 04:59:44 45 ... 3 09:29:43
2452 06:03:59 96 ... 3 12:12:35
2453 06:07:27 16 ... 3 12:47:11
2454 04:38:06 91 ... 3 09:52:27
2455 04:41:56 14 ... 3 08:58:46
2456 04:38:48 85 ... 3 09:18:31
2457 04:42:30 42 ... 3 09:07:29
2458 04:40:54 110 ... 3 09:32:34
2459 06:08:59 37 ... 3 12:15:23
2460 04:32:20 -- ... 2 05:31:05
2461 04:45:03 96 ... 3 09:30:06
2462 06:14:29 95 ... 3 13:38:54
2463 06:00:20 164 ... 3 12:10:03
2464 05:11:07 22 ... 3 10:32:35
2465 05:56:06 188 ... 3 13:32:48
2466 05:09:26 2 ... 3 09:54:55
2467 05:22:15 7 ... 3 10:26:14
2468 05:53:14 254 ... 3 12:34:21
2469 05:00:29 156 ... 3 10:18:29
2470 04:30:46 7 ... 3 08:38:23
2471 04:34:59 39 ... 3 09:04:13
[2472 rows x 9 columns]