小编Sea*_*thy的帖子

使用loc和使用方括号来过滤Pandas/Python中的列有什么区别?

我注意到在Pandas DataFrame中选择一个列的三种方法:

使用loc选择列的第一种方法:

df_new = df.loc[:, 'col1']
Run Code Online (Sandbox Code Playgroud)

第二种方法 - 看起来更简单,更快捷:

df_new = df['col1']
Run Code Online (Sandbox Code Playgroud)

第三种方法 - 最方便:

df_new = df.col1
Run Code Online (Sandbox Code Playgroud)

这三种方法有区别吗?我不这么认为,在这种情况下我宁愿使用第三种方法.

我很好奇为什么似乎有三种方法可以做同样的事情.

python dataframe pandas

40
推荐指数
2
解决办法
8096
查看次数

将 pandas.core.groupby.SeriesGroupBy 转换为 DataFrame

这个问题没有得到满意的答案,所以我再问一次。

假设我有以下 Pandas DataFrame:

df1 = pd.DataFrame({'group': ['a', 'a', 'b', 'b'], 'values': [1, 1, 2, 2]})
Run Code Online (Sandbox Code Playgroud)

我按第一列“组”分组:

g1 = df1.groupby('group')
Run Code Online (Sandbox Code Playgroud)

我现在已经创建了一个“ DataFrame GroupBy”。然后我从 GroupBy 对象中提取第一列:

g1_1st_column = g1['group']
Run Code Online (Sandbox Code Playgroud)

该类型g1_1st_column的是“pandas.core.groupby。系列的GroupBy”。请注意,它不再是“ DataFrame GroupBy”。

我的问题是,如何将 SeriesGroupBy 对象转换回 DataFrame 对象?我尝试使用 .to_frame() 方法,并得到以下错误:

g1_1st_column = g1['group'].to_frame()
Run Code Online (Sandbox Code Playgroud)

AttributeError:无法访问“SeriesGroupBy”对象的可调用属性“to_frame”,请尝试使用“apply”方法。

我将如何使用 apply 方法或其他一些方法转换为 DataFrame?

python apply dataframe pandas pandas-groupby

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

配置AWS Cloud9以使用Anaconda Python环境

我希望AWS Cloud9能够使用我的Anaconda Python环境中的Python版本和特定软件包.我怎样才能做到这一点?我应该在哪里查看设置或配置?

我目前的设置:我有一个带有Ubuntu Linux的AWS EC2实例,我已经配置了AWS Cloud9以使用EC2实例.

我在EC2实例上安装了Anaconda,我创建了一个conda Python3环境,但Cloud9总是想使用我的Linux系统安装的Python3版本.

python amazon-ec2 amazon-web-services anaconda aws-cloud9

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

如何将Pandas数据框中的多列弹出到新数据框中?

假设我有以下内容:

df = pd.DataFrame({'a':range(2), 'b':range(2), 'c':range(2), 'd':range(2)})
Run Code Online (Sandbox Code Playgroud)

我想从数据框中“弹出”两列(“ c”和“ d”)到一个新的数据框中,在原始df中保留“ a”和“ b”。以下内容不起作用:

df2 = df.pop(['c', 'd'])
Run Code Online (Sandbox Code Playgroud)

这是我的错误:

TypeError: '['c', 'd']' is an invalid key
Run Code Online (Sandbox Code Playgroud)

除了执行以下操作之外,还有谁知道快速,一流的解决方案?

df2 = df[['c', 'd']]
df3 = df[['a', 'b']]
Run Code Online (Sandbox Code Playgroud)

我知道上面的代码键入起来并不是那么繁琐,但这就是发明DataFrame.pop的原因-为我们节省了从数据库中弹出一列的步骤。

python pandas

7
推荐指数
2
解决办法
4743
查看次数

在 Pandas 日期时间列中标记夏令时 (DST) 小时

我创建了一个每小时日期数据框,现在我想创建一个列来标记每行(小时)是否处于夏令时。例如,在夏季,该标志应 == 1,而在冬季,该标志应 == 0。

# Localized dates dataframe
dates = pd.DataFrame(data=pd.date_range('2018-1-1', '2019-1-1', freq='h', tz='America/Denver'), columns=['date_time'])

# My failed attempt to create the flag column
dates['dst_flag'] = np.where(dates['date_time'].dt.daylight_saving_time == True, 1, 0)
Run Code Online (Sandbox Code Playgroud)

python pytz python-3.x pandas

7
推荐指数
1
解决办法
8627
查看次数

使用十六进制代码设置自定义 seaborn 调色板,并命名颜色

我的公司有一个正式的调色板,所以我需要在我的 seaborn 图表中使用这些颜色。因此,我想设置默认的 seaborn 调色板,并为这些颜色提供易于使用的名称,例如“p”代表紫色,“g”代表绿色。

这是我到目前为止的代码:

# Required libraries
import matplotlib.pyplot as plt
import seaborn as sns

# Wanted palette details
enmax_palette = ["#808282", "#C2CD23", "#918BC3"]
color_codes_wanted = ['grey', 'green', 'purple']

# Set the palette
sns.set_palette(palette=enmax_palette)

# Assign simple color codes to the palette
Run Code Online (Sandbox Code Playgroud)

请帮助我使用我的“color_codes_wanted”列表为颜色指定简单的名称。

python matplotlib seaborn

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

SSH进入AWS Cloud9环境

我想通过SSH进入我的Amazon Web Services(AWS)Cloud9弹性云计算(EC2)环境,但是没有分配给Cloud9 EC2环境的密钥对。如何为该环境分配密钥对,以便可以通过SSH进入该环境?

我通过Cloud9界面创建了AWS Cloud9 EC2环境,而不是创建EC2环境,然后通过Cloud9访问它。通常,当我创建EC2环境时,就有机会分配一个现有的密钥对,或创建一个新的密钥对。当我通过Cloud9创建环境时,没有向我提供此选项。

ssh amazon-ec2 ssh-keys amazon-web-services aws-cloud9

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

Python Flask UnsupportedOperation:不可写

当我运行以下代码时,我收到错误消息:“ UnsupportedOperation:不可写”:

from flask import Flask

app_flask = Flask(__name__)

@app_flask.route('/')
def hello_method():
    return "Hello, main page!"

if __name__ == '__main__':
    app_flask.run()
Run Code Online (Sandbox Code Playgroud)

谁能提供一些指导?我知道还有另一个问题,但是答案根本没有帮助。以下是错误消息的其余部分:

Traceback (most recent call last):

  File "<ipython-input-13-a122d150300b>", line 20, in <module>
    app_flask.run()

  File "C:\anaconda3\lib\site-packages\flask\app.py", line 938, in run
    cli.show_server_banner(self.env, self.debug, self.name, False)

  File "C:\anaconda3\lib\site-packages\flask\cli.py", line 629, in show_server_banner
    click.echo(message)

  File "C:\anaconda3\lib\site-packages\click\utils.py", line 259, in echo
    file.write(message)

UnsupportedOperation: not writable
Run Code Online (Sandbox Code Playgroud)

python flask

4
推荐指数
1
解决办法
7449
查看次数

Flask-Admin 删除“Home”按钮

如何删除 Python Flask-Admin 库中的“Home”按钮?

在此输入图像描述

from flask_admin import Admin

flask_admin = Admin(app, 
    name='Customer Admin', 
    template_mode='bootstrap3', 
    # endpoint refers to the blueprint [e.g. url_for('admin_cust.index')] where index() is the function/view
    index_view=SecuredAdminIndexView(url='/admin_cust', endpoint='admin_cust')
)

# Add model (database table) views to the page
flask_admin_cust.add_view(UserView(User, db.session, category='Users', name='View/Edit User', endpoint='users'))
flask_admin.add_view(CustSubGroupView(CustSubGroup, db.session, name='Groups', endpoint='groups'))
flask_admin.add_view(GwView(Gw, db.session, endpoint='units', name='Units'))
Run Code Online (Sandbox Code Playgroud)

python flask flask-admin

4
推荐指数
1
解决办法
3034
查看次数

比较两列后 Pandas 计数器增加

我想在 pandas 中创建一个简单的计数器,每次循环完成时该计数器都会加一。这应该很简单,但我无法弄清楚...这是我想做的,并带有说明性的 pandas DataFrame:

# Illustrative dataframe
df = pd.DataFrame({'a':[0,0,1,1,0,0,1,1], 'b':[0,1,1,0,0,1,1,0]})

# Initialize counter to zero
counter = 0

# Increment the counter by 1 every time 'a' == 1 and 'b' == 0
df['c'] = [counter += 1 if (df['a'] == 1) and (df['b'] == 0)]
Run Code Online (Sandbox Code Playgroud)

如果有人向我展示如何使用 pandas.apply 使用自定义函数来执行此操作,我会很高兴。本质上,我循环遍历 DataFrame 中的每个记录/行,并比较两列。

我知道我可能可以使用 numpy.where() 来做到这一点,然后进行扩展总和,但我真的很想学习如何将 apply 与自定义函数一起使用。

这是我尝试的另一种方法,使用自定义函数和 pandas.apply:

counter_list = []
counter = 0
def count_cycles(df):
    if (df['a'] == 1) and (df['b'] == 0):
        counter += 1
    counter_list.append(counter) …
Run Code Online (Sandbox Code Playgroud)

python apply pandas

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

Amazon Web Services (AWS) Lambda 是否支持所有 Python 库?

例如,我想使用 scikit-learn 进行机器学习,使用 pandas、numpy 和 matplotlib/seaborn 进行数据分析。AWS Lambda 是否支持所有这些库?是否有支持的库列表?或者我应该创建一个虚拟服务器,以确保我可以使用我想要的任何 Python 库?

python amazon-web-services aws-lambda

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

使用 pandas 按列分组,然后根据条件创建新列

我需要用 Pandas 重现 SQL 所做的事情:

select
    del_month
    , sum(case when off0_on1 = 1 then 1 else 0 end) as on1
    , sum(case when off0_on1 = 0 then 1 else 0 end) as off0
from a1
group by del_month
order by del_month
Run Code Online (Sandbox Code Playgroud)

这是一个示例,说明性的 Pandas 数据框可以处理:

a1 = pd.DataFrame({'del_month':[1,1,1,1,2,2,2,2], 'off0_on1':[0,0,1,1,0,1,1,1]})
Run Code Online (Sandbox Code Playgroud)

这是我尝试用 Pandas 重现上述 SQL 的尝试。第一行有效。第二行报错:

a1['on1'] = a1.groupby('del_month')['off0_on1'].transform(sum)
a1['off0'] = a1.groupby('del_month')['off0_on1'].transform(sum(lambda x: 1 if x == 0 else 0))
Run Code Online (Sandbox Code Playgroud)

这是第二行的错误:

TypeError: 'function' object is not iterable
Run Code Online (Sandbox Code Playgroud)

以前我的问题曾与lambda函数,这是亟待解决的问题。更大的问题是如何在分组数据上重现 SQL 的“sum(case when)”逻辑。我正在寻找一个通用的解决方案,因为我需要经常做这种事情。我之前问题中的答案建议在 …

python sql lambda pandas pandas-groupby

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

PostgreSQL 物化视图无法从 Python 刷新

我在 TimescaleDB(时间序列数据的 PostgreSQL 扩展)中创建了一个物化视图,当我使用来自 PGAdmin 的以下代码刷新它时,添加了最新数据并且一切正常:

REFRESH MATERIALIZED VIEW CONCURRENTLY 
    public.time_series_mv
    WITH DATA;
Run Code Online (Sandbox Code Playgroud)

当我在 Python 中使用相同的用户 (postgres) 运行完全相同的代码时,它表示成功(即没有发生错误)但最新的数据实际上并未添加到物化视图中......

因此,我尝试创建一个函数来做同样的事情:

CREATE OR REPLACE FUNCTION refresh_time_series_mv()
    RETURNS void
    SECURITY DEFINER
    AS $$
    BEGIN
    REFRESH MATERIALIZED VIEW CONCURRENTLY time_series_mv with data;
    RETURN;
    END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

然后我按如下方式运行该函数,同样,它在我的浏览器中从 PGAdmin 运行,但当我在我的调度应用程序中从 Python 运行相同的 SQL 时则不起作用。

select refresh_time_series_mv();
Run Code Online (Sandbox Code Playgroud)

这是我的 Python 代码:

import psycopg2

SQL1 = """
    REFRESH MATERIALIZED VIEW CONCURRENTLY 
    public.time_series_mv
    WITH DATA
"""

SQL2 = "select refresh_time_series_mv();"

host = os.getenv("HOST") 
port = int(os.getenv("PORT")) …
Run Code Online (Sandbox Code Playgroud)

python postgresql pgadmin timescaledb

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