小编Sar*_*thy的帖子

将当前行值与前一行值进行比较

我有来自用户 A 一天的登录历史数据。我的要求是用户 A 在任何时候都只能有一个有效的登录名。在下面的示例中,用户可能多次尝试成功登录,而他的第一个会话仍处于活动状态。因此,在有效会话期间发生的任何登录都需要标记为重复。

示例 1:

在下面的第一个示例数据中,当用户仍然从00:12:38to01:00:02 (index 0)登录时,用户在00:55:14to处进行了另一个登录01:00:02 (index 1)

同样,如果我们比较index 23,我们可以看到记录 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)

python dataframe pandas

8
推荐指数
1
解决办法
430
查看次数

设置parse_date = ['列名']时,pd.read_csv无法正确解析日期/月份字段

我试图通过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)

python datetime parsing date-format pandas

6
推荐指数
1
解决办法
3302
查看次数

如何删除数据框中的回车

我有一个包含名为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)

python replace carriage-return pandas data-cleaning

5
推荐指数
1
解决办法
2万
查看次数

如何将pandas Series转换为所需的JSON格式?

我有以下数据,我需要做的是应用聚合函数,然后是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.pywith,

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格式吗?

json python-2.7 pandas to-json data-cleaning

3
推荐指数
1
解决办法
497
查看次数