我有来自用户 A 一天的登录历史数据。我的要求是用户 A 在任何时候都只能有一个有效的登录名。在下面的示例中,用户可能多次尝试成功登录,而他的第一个会话仍处于活动状态。因此,在有效会话期间发生的任何登录都需要标记为重复。
示例 1:
在下面的第一个示例数据中,当用户仍然从00:12:38
to01:00:02 (index 0)
登录时,用户在00:55:14
to处进行了另一个登录01:00:02 (index 1)
。
同样,如果我们比较index 2
和3
,我们可以看到记录 atindex 3
是根据要求重复登录。
start_time end_time
0 00:12:38 01:00:02
1 00:55:14 01:00:02
2 01:00:02 01:32:40
3 01:00:02 01:08:40
4 01:41:22 03:56:23
5 18:58:26 19:16:49
6 20:12:37 20:52:49
7 20:55:16 22:02:50
8 22:21:24 22:48:50
9 23:11:30 00:00:00
Run Code Online (Sandbox Code Playgroud)
预期输出:
start_time end_time isDup
0 00:12:38 01:00:02 0
1 00:55:14 01:00:02 1
2 01:00:02 01:32:40 0
3 01:00:02 …
Run Code Online (Sandbox Code Playgroud) 我试图通过parse_dates解析几个日期时遇到了这个bug pandas.read_csv()
.在下面的代码片段中,我试图解析具有dd/mm/yy
导致我转换不正确的格式的日期.在某些情况下,日期字段被视为月份,反之亦然.
为了简单起见,有些情况下dd/mm/yy
转换为yyyy-dd-mm
而不是yyyy-mm-dd
.
情况1:
04/10/96 is parsed as 1996-04-10, which is wrong.
Run Code Online (Sandbox Code Playgroud)
案例2:
15/07/97 is parsed as 1997-07-15, which is correct.
Run Code Online (Sandbox Code Playgroud)
案例3:
10/12/97 is parsed as 1997-10-12, which is wrong.
Run Code Online (Sandbox Code Playgroud)
代码示例
import pandas as pd
df = pd.read_csv('date_time.csv')
print 'Data in csv:'
print df
print df['start_date'].dtypes
print '----------------------------------------------'
df = pd.read_csv('date_time.csv', parse_dates = ['start_date'])
print 'Data after parsing:'
print df
print df['start_date'].dtypes
Run Code Online (Sandbox Code Playgroud)
电流输出
----------------------
Data in csv:
----------------------
start_date
0 04/10/96 …
Run Code Online (Sandbox Code Playgroud) 我有一个包含名为id,country_name,location和total_deaths列的数据框.在进行数据清理过程时,我偶然发现了一个'\r'
连接的值.完成清理过程后,我将生成的数据帧存储在destination.csv文件中.由于上面的特定行已\r
附加,因此它始终会创建一个新行.
id 29
location Uttar Pradesh\r
country_name India
total_deaths 20
Run Code Online (Sandbox Code Playgroud)
我想删除\r
.我试过了df.replace({'\r': ''}, regex=True)
.它不适合我.
还有其他解决方案.有人可以帮忙吗?
在上面的过程中,我迭代df以查看是否\r
存在.如果存在,则需要更换.这里row.replace()
或row.str.strip()
似乎没有工作,或者我可能以错误的方式做到这一点.
我不想在使用时指定列名或行号replace()
.因为我无法确定只有"位置"列才会有\r
.请在下面找到代码.
count = 0
for row_index, row in df.iterrows():
if re.search(r"\\r", str(row)):
print type(row) #Return type is pandas.Series
row.replace({r'\\r': ''} , regex=True)
print row
count += 1
Run Code Online (Sandbox Code Playgroud) 我有以下数据,我需要做的是应用聚合函数,然后是groupby.
我的数据如下: data.csv
id,category,sub_category,count
0,x,sub1,10
1,x,sub2,20
2,x,sub2,10
3,y,sub3,30
4,y,sub3,5
5,y,sub4,15
6,z,sub5,20
Run Code Online (Sandbox Code Playgroud)
在这里,我试图通过子类别明智地获得计数.之后,我需要以JSON格式存储结果.以下代码帮助我实现了这一目标.test.py
import pandas as pd
df = pd.read_csv('data.csv')
sub_category_total = df['count'].groupby([df['category'], df['sub_category']]).sum()
print sub_category_total.reset_index().to_json(orient = "records")
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了以下格式.
[{"category":"x","sub_category":"sub1","count":10},{"category":"x","sub_category":"sub2","count":30},{"category":"y","sub_category":"sub3","count":35},{"category":"y","sub_category":"sub4","count":15},{"category":"z","sub_category":"sub5","count":20}]
Run Code Online (Sandbox Code Playgroud)
但是,我想要的格式如下:
{
"x":[{
"sub_category":"sub1",
"count":10
},
{
"sub_category":"sub2",
"count":30}],
"y":[{
"sub_category":"sub3",
"count":35
},
{
"sub_category":"sub4",
"count":15}],
"z":[{
"sub_category":"sub5",
"count":20}]
}
Run Code Online (Sandbox Code Playgroud)
按照讨论@ 如何将pandas DataFrame结果转换为用户定义的json格式,我替换了最后2行的test.py
with,
g = df.groupby('category')[["sub_category","count"]].apply(lambda x: x.to_dict(orient='records'))
print g.to_json()
Run Code Online (Sandbox Code Playgroud)
它给了我以下输出.
{"x":[{"count":10,"sub_category":"sub1"},{"count":20,"sub_category":"sub2"},{"count":10,"sub_category":"sub2"}],"y":[{"count":30,"sub_category":"sub3"},{"count":5,"sub_category":"sub3"},{"count":15,"sub_category":"sub4"}],"z":[{"count":20,"sub_category":"sub5"}]}
Run Code Online (Sandbox Code Playgroud)
虽然上面的结果有点类似于我想要的格式,但我无法在这里执行任何聚合功能,因为它会抛出错误说'numpy.int64' object has no attribute 'to_dict'
.因此,我最终得到了数据文件中的所有行.
有人可以帮助我实现上述JSON格式吗?
pandas ×4
python ×3
dataframe ×1
date-format ×1
datetime ×1
json ×1
parsing ×1
python-2.7 ×1
replace ×1
to-json ×1