相关疑难解决方法(0)

对于有熊猫的循环 - 我什么时候应该关心?

我熟悉"矢量化"的概念,以及熊猫如何使用矢量化技术来加速计算.矢量化函数在整个系列或DataFrame上广播操作,以实现比传统迭代数据更大的加速.

但是,我很惊讶地看到很多代码(包括Stack Overflow的答案)提供了解决问题的方法,这些问题涉及使用for循环和列表推导来循环数据.阅读完文档后,对API有了不错的理解,我认为循环是"坏的",并且应该"永远"迭代数组,系列或DataFrame.那么,为什么我会不时地看到用户提出循环解决方案呢?

因此,要总结......我的问题是:
是否for循环真正的"坏"?如果不是,在什么情况下它们会比使用更传统的"矢量化"方法更好?1

1 - 虽然这个问题确实听起来有点宽泛,但事实是,当for循环通常比传统的迭代数据更好时,存在非常具体的情况.这篇文章旨在为后人捕捉这一点.

python iteration list-comprehension vectorization pandas

85
推荐指数
2
解决办法
7819
查看次数

pandas:在DataFrame中组合两列

我有一个DataFrame包含多个列的pandas :

Index: 239897 entries, 2012-05-11 15:20:00 to 2012-06-02 23:44:51
Data columns:
foo                   11516  non-null values
bar                   228381  non-null values
Time_UTC              239897  non-null values
dtstamp               239897  non-null values
dtypes: float64(4), object(1)
Run Code Online (Sandbox Code Playgroud)

where foobar是包含相同数据的列,但命名方式不同.是否有移动从而弥补了行的方式foo进入bar,最好同时保持的名字bar

最后,DataFrame应显示为:

Index: 239897 entries, 2012-05-11 15:20:00 to 2012-06-02 23:44:51
Data columns:
bar                   239897  non-null values
Time_UTC              239897  non-null values
dtstamp               239897  non-null values
dtypes: float64(4), object(1)
Run Code Online (Sandbox Code Playgroud)

这就是组成bar的NaN值被来自的值替换foo.

python dataframe pandas

23
推荐指数
4
解决办法
6万
查看次数

如何将多个列值连接到Panda数据帧中的单个列中

这个问题与之前发布的相同.我想连接三列而不是连接两列:

这是结合两列:

df = DataFrame({'foo':['a','b','c'], 'bar':[1, 2, 3], 'new':['apple', 'banana', 'pear']})

df['combined']=df.apply(lambda x:'%s_%s' % (x['foo'],x['bar']),axis=1)

df
    bar foo new combined
0   1   a   apple   a_1
1   2   b   banana  b_2
2   3   c   pear    c_3
Run Code Online (Sandbox Code Playgroud)

我想用这个命令组合三个列,但它不起作用,任何想法?

df['combined']=df.apply(lambda x:'%s_%s' % (x['bar'],x['foo'],x['new']),axis=1)
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

20
推荐指数
8
解决办法
7万
查看次数

如何从Python中的dataframe columns元素创建字符串?

给定一个数据帧df,(现实生活是+1000行df).元素ColB是列表列表.

  ColA    ColB
0  'A'    [['a','b','c'],['d','e','f']]
1  'B'    [['f','g','h'],['i','j','k']]
2  'A'    [['l','m','n'],['o','p','q']]
Run Code Online (Sandbox Code Playgroud)

如何ColC使用不同列中的元素有效地创建一个字符串,如下所示:

      ColC
'A>+a b:c,+d e:f'
'B>+f g:h,+i j:k'
'A>+l m:n,+o p:q'
Run Code Online (Sandbox Code Playgroud)

我尝试了df.apply这些方法,灵感来自于:

df['ColC'] = df.apply(lambda x:'%s>' % (x['ColA']),axis=1)
Run Code Online (Sandbox Code Playgroud)

这适用于字符串的前2个元素.其余的都很难过.

python string dataframe pandas

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

如何为年/月/日/小时/分钟/秒的日期时间创建熊猫列?

我正在尝试在Pandas中构造一个datetime列,该列代表描述年,月,日等的多个列。我在该主题上可以找到的其他大多数答案都涉及相反方向的处理数据(从datetime到integer hour,对于实例)。

df = pd.DataFrame()

df['year'] = [2019, 2019, 2019, 2019, 2019, 2019]
df['month'] = [8, 8, 8, 8, 8, 8]
df['day'] = [1, 1, 1, 1, 1, 1]
df['hour'] = [10,10,11,11,12,12]
df['minute'] = [15,45,20,40,10,50]
df['second'] = [0, 1, 5, 10, 10, 11]
Run Code Online (Sandbox Code Playgroud)

目标:

df['datetime_val'] = 
0   2019-08-01 10:15:00
1   2019-08-01 10:45:01
2   2019-08-01 11:20:05
3   2019-08-01 11:40:10
4   2019-08-01 12:10:10
5   2019-08-01 12:50:11
Name: datetime_vals, dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,如何快速创建一个代表组成时间信息的datetime列?我可以使用.apply()和一个辅助函数轻松地做到这一点,但我设想对数百万行执行此操作。我喜欢内置/矢量化的东西。谢谢!

python pandas

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

如何基于 pd.DataFrame 值创建 f-string(类似)列表?

问题
如何根据pandas DataFrame 的值创建带有占位符(即“f-string”之类的)的字符串列表?

例子

想象一下我有以下数据框:

import pandas as pd

data = [
    ['Alice', 13, 'apples'],
    ['Bob', 17, 'bananas']
]

df = pd.DataFrame(
    data,
    columns=['name', 'qty', 'fruit']
)
Run Code Online (Sandbox Code Playgroud)

如何使用类似f"{name} ate {qty} {fruit}"模式创建字符串列表?
换句话说,如何创建以下列表:

[
    'Alice ate 13 apples',
    'Bob ate 17 bananas'
]
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas f-string

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