小编ALo*_*llz的帖子

为什么使用字符串和timedeltas转换数据框转换dtype?

这种行为对我来说似乎很奇怪:id当转换df另一列是timedelta时,列(字符串)转换为时间戳.

import pandas as pd
df = pd.DataFrame({'id': ['00115', '01222', '32333'],
                   'val': [12, 14, 170]})
df['val'] = pd.to_timedelta(df.val, unit='M')

print(df.T)
#                         0                      1                      2
#id  0 days 00:00:00.000000 0 days 00:00:00.000001 0 days 00:00:00.000032
#val      365 days 05:49:12      426 days 02:47:24     5174 days 06:27:00

type(df.T[0][0])
#pandas._libs.tslib.Timedelta
Run Code Online (Sandbox Code Playgroud)

没有timedelta它按照我的预期工作,并且id列仍然是一个字符串,即使另一列是一个整数,所有字符串都可以安全地转换为整数.

df2 = pd.DataFrame({'id': ['00115', '01222', '32333'],
                    'val': [1, 1231, 1413]})

type(df2.T[0][0])
#str
Run Code Online (Sandbox Code Playgroud)

为什么id在第一个实例中更改get 的类型,而不是第二个实例?

python pandas

9
推荐指数
1
解决办法
393
查看次数

通过应用涉及相同行元素的函数来更新数据框的元素

我有以下数据框:

a    b    c    d    e    f    g    h    i    j
1    2    3    4    5    6    7    8   0.1  0.11
11   12   13   14   15   16   17   18  0.2  0.12
21   22   23   24   25   26   27   28  0.3  0.13
31   32   33   34   35   36   37   38  0.4  0.14
Run Code Online (Sandbox Code Playgroud)

我想读取EACH ROW,并针对a到h列(在该行)中的每个值,减去i列中的值并除以j列中的值,然后用该结果值替换该原始值,并更新整个数据帧(从a到h)。

在这种情况下我应该如何进行?

python pandas

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

从另一个系列解析 Pandas 系列

我试图解析一系列文本,使用一系列数字,如下面的代码,但我得到的只是一系列 NaN。

import numpy as np
import pandas as pd
numData = np.array([4,6,4,3,6])
txtData = np.array(['bluebox','yellowbox','greybox','redbox','orangebox'])
n = pd.Series(numData)
t = pd.Series(txtData)
x = t.str[:n]
print (x)
Run Code Online (Sandbox Code Playgroud)

输出是

0   NaN
1   NaN
2   NaN
3   NaN
4   NaN
Run Code Online (Sandbox Code Playgroud)

我希望输出是

0      blue
1    yellow
2      grey
3       red
4    orange
Run Code Online (Sandbox Code Playgroud)

是否有捷径可寻。

python pandas

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

Python - 200万行表中的计数器

举个例子,我有以下数据帧:

Date                     Balance
2013-04-01 03:50:00         A
2013-04-01 04:00:00         A
2013-04-01 04:15:00         B
2013-04-01 04:15:00         B
2013-04-01 04:25:00         A
2013-04-01 04:25:00         A
2013-04-01 04:35:00         B
2013-04-01 04:40:00         B
2013-04-02 04:55:00         B
2013-04-02 04:56:00         A
2013-04-02 04:57:00         A
2013-04-03 10:30:00         A
2013-04-03 16:35:00         A
2013-04-03 20:40:00         A
Run Code Online (Sandbox Code Playgroud)

我的目标是添加一个"计数器"列,基本上显示A和B的数量的平衡.因此,每次出现A时,计数器列都会增加一个值.每次出现B时,计数器列都会减少一个值.如果两个连续行中同时出现两个A(相同的日期),则两个行的余额应增加2(同样的推理适用于连续的B或同时适用于A和B).因此,数据框最终会如下所示:

 Date                     Balance        Counter
2013-04-01 03:50:00         A               1
2013-04-01 04:00:00         A               2
2013-04-01 04:15:00         B               0
2013-04-01 04:15:00         B               0
2013-04-01 04:25:00         A               2
2013-04-01 04:25:00         A               2
2013-04-01 04:35:00         B               1
2013-04-01 04:40:00         B …
Run Code Online (Sandbox Code Playgroud)

python counter vectorization pandas

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

Python时间戳作为索引

因为我现在正在写我的硕士论文,所以我必须第一次使用 Python。为了用时间戳索引我的数据,我尝试了以下方法,但实际上并不奏效。好吧,也许确实如此,但是通过timestemp访问数据真是太愚蠢了。也许有人可以帮助我做下一步,以便我使用时间戳访问数据,以便我可以将我的年度数据分成几个月。

import pandas as pd
import numpy as np
import matplotlib.pylab as plt
from matplotlib import pyplot
import datetime as dt
from matplotlib.pylab import rcParams
import datetime
rcParams['figure.figsize'] = 15, 6

data = pd.read_csv('PhelixPowerSpotHistory_2015.csv')
data['Delivery Date']=pd.to_datetime(data['Delivery Date'])
#data['Time']= pd.to_datetime(data.DeliveryDate)
#print (data.head())
print(data.head(10))
from datetime import datetime
ts = data['PriceEUR/MWh']
print(ts.head(10))


import matplotlib.pyplot as plt
plt.plot(ts)
plt.ylabel('€/MWh')
plt.xlabel('Delivery Date')
plt.xticks(np.linspace(0,8721,12))
plt.show()
Run Code Online (Sandbox Code Playgroud)

我的数据头部如下所示:

0 2015-01-01 00:00:00         25.02
1 2015-01-01 01:00:00         18.29
2 2015-01-01 02:00:00         16.04
3 2015-01-01 03:00:00         14.60
4 2015-01-01 …
Run Code Online (Sandbox Code Playgroud)

python timestamp matplotlib pandas

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

在Python中合并DataFrame而不复制列

我正在尝试基于公共列合并多个DataFrame.这将在循环中完成,原始DataFrame可能没有所有列,因此需要外部合并.但是,当我在几个不同的DataFrames列上执行此操作时,使用后缀_x和_y复制.我正在寻找一个填充数据的DataFrame,并且只有在以前不存在的情况下才添加列.

df1=pd.DataFrame({'Company Name':['A','B','C','D'],'Data1':[1,34,23,66],'Data2':[13,54,5354,443]})
      Company Name  Data1  Data2
0            A      1     13
1            B     34     54
2            C     23   5354
3            D     66    443
Run Code Online (Sandbox Code Playgroud)

第二个DataFrame,包含一些公司的附加信息:

pd.DataFrame({'Company Name':['A','B'],'Address':  ['str1', 'str2'], 'Phone': ['str1a', 'str2a']})

  Company Name Address  Phone
0            A    str1  str1a
1            B    str2  str2a
Run Code Online (Sandbox Code Playgroud)

如果我想组合这两个,它将使用on = Column成功合并为一个:

df1=pd.merge(df1,df2, on='Company Name', how='outer')

  Company Name  Data1  Data2 Address  Phone
0            A      1     13    str1  str1a
1            B     34     54    str2  str2a
2            C     23   5354     NaN    NaN
3            D     66    443     NaN    NaN …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas

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

Python - 转换数据帧和切片

我附上了截图以帮助解释.我有一个从克利夫兰心脏数据集中提取的数据框,该数据集占用76列并将它们放入7列,并将其他列包装到下一行.我试图弄清楚如何将该数据帧变为可读格式,如右侧的数据框所示.

在此输入图像描述

变量xyz将始终相同,但我列出的其他字母变量将不同.我以为我可以使用data.loc [:,:'xyz']开始,但我不知道从哪里开始:

data = pd.read_csv("../resources/cleveland.data")
data.loc[:, :'xyz']
Run Code Online (Sandbox Code Playgroud)

然后我必须从那里开始为这些变量分配列名.令人惊讶的是,一旦我解决了这个问题,火车,测试,验证部分将更加容易.在此先感谢您的帮助.(我是菜鸟)

python pandas

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

使用组约束将列值向左移动

我有一个“潜在”的大型DataFrame,

     A    B_1    B_2    B_3    C_1    C_2    C_3
0  231  text2  text3    NaN  date4  date1    NaN
1  443  NaN    NaN    text1  date2    NaN    NaN
2  456  text1  text1  text2  NaN    date3  date1
Run Code Online (Sandbox Code Playgroud)

为了最小化某些NaNs,我想将所有数据向左移动,从而能够忽略所有NaN列。但是,此移位必须保留在适当的组内,这意味着,只要单元格不在B_1或B_2列中,只要它不移位到C_1等,都没有关系。

我最后要说的是

     A    B_1    B_2    B_3    C_1    C_2    
0  231  text2  text3    NaN  date4  date1
1  443  text1    NaN    NaN  date2    NaN
2  456  text1  text1  text2  date3  date1
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

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

仅当另一个列值为True时比较两个或多个列值

仅当另一个列值为True时,才如何比较两个(或更多列)值。理想情况下,输出将只是True(如果一切都正确匹配),否则为False。

这样的事情:df['value1'].equals(df['value2'])但仅当df ['isValid']为true时。

抱歉,如果这是一个愚蠢的问题,我是熊猫的初学者...

考虑以下数据框:

范例1:

isValid     value1   value2
True        50       50
True        19       19
False       48       40
Run Code Online (Sandbox Code Playgroud)

输出应为:True(记录一和两次匹配),并且“ isValid”列为True(这意味着我们必须比较值)

范例2:

isValid     value1   value2
False       50       50
False       19       19
False       48       40
Run Code Online (Sandbox Code Playgroud)

输出应为True(无需进行比较,那么就没错了)

范例3:

isValid     value1   value2
True        50       50
False       19       19
True        48       40
Run Code Online (Sandbox Code Playgroud)

输出应为False(因为记录3的value1和value2不同)

python dataframe pandas

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

如何删除 pandas 数据框中的重复行,以便仅删除最后一个条目

如何删除重复行,以便仅删除最后一个重复条目。pandas drop_duplicates 函数只会保留第一个条目或最后一个条目,但我需要除最后一个条目之外的所有条目。

例如:

X = pd.DataFrame({"col1": list('acbcaa')})
Run Code Online (Sandbox Code Playgroud)

所需输出

X = pd.DataFrame({"col1": list('acba')})
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
0
解决办法
167
查看次数