小编bha*_*atk的帖子

Pandas DataFrame 将函数应用于多列并输出多列

我一直在寻找应用函数的最佳方法,该函数采用多个单独的 Pandas DataFrame 列并在同一个所述 DataFrame 中输出多个新列。假设我有以下内容:

def apply_func_to_df(df):
    df[['new_A', 'new_B']] = df.apply(lambda x: transform_func(x['A'], x['B'], x['C']), axis=1)

def transform_func(value_A, value_B, value_C):
    # do some processing and transformation and stuff
    return new_value_A, new_value_B
Run Code Online (Sandbox Code Playgroud)

我正在尝试将此函数如上所示应用于整个 DataFrame df,以便输出 2 个新列。但是,这可以推广到接受nDataFrame 列并将m新列输出到同一 DataFrame 的用例/函数。

以下是我一直在关注的事情(取得了不同程度的成功):

  • 为函数调用创建一个 Pandas Series,然后附加到现有的 DataFrame,
  • 压缩输出列(但在我当前的实现中出现了一些问题)
  • 重写基本函数transform_func以显式期望行(即字段)A, BC如下所示,然后对 df 进行 apply:

def transform_func_mod(df_row):
    # do something with df_row['A'], df_row['B'], df_row['C]
    return new_value_A, new_value_B
Run Code Online (Sandbox Code Playgroud)

我想要一种非常通用和 Pythonic 的方法来完成这项任务,同时考虑性能(内存和时间方面)。我将不胜感激对此的任何意见,因为由于我对 Pandas 不熟悉,我一直在努力解决这个问题。

python apply dataframe pandas

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

具有默认值的 python 字典 .get() 方法即使不应该执行也会抛出异常

我有一个字典,我想使用 .get() 方法检索一些值,如果键不存在,则应执行返回正确值的默认函数,但仅当键不存在时才应执行展示。

我尝试删除默认值并且它有效,那么为什么即使不使用该函数也会执行它?

SQL 查询不会返回任何内容,因为它只包含字典中尚未存在的值

def get_port():

    def default():
        cursor.execute("SELECT port FROM table WHERE server=%s LIMIT 1",(server_name,))
        return cursor.fetchone()[0]

    port = {
        'server1': 2222,
        'server2': 2223,
        'server3': 2224
        }
    #print(port.get(server_name)) << Works
    return port.get(server_name, default())
Run Code Online (Sandbox Code Playgroud)

错误:

返回cursor.fetchone()[0] TypeError:“NoneType”对象不可下标

我希望默认函数仅在密钥不存在时执行。

python python-3.x

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

如果项目不以“。”结尾,则连接列表项目。

我有一个字符串列表,如果它们的结尾不是“。”,我想将它们串联起来。

my_list=["This is my first string.","This is my second string, ","this is the middle of my second string","and this is the end of my second string."]
for index in range(len(my_list)):
    text=my_list[index]:
        if not text.endswith("."):
Run Code Online (Sandbox Code Playgroud)

预期 ["This is my first string.","This is my second string, this is the middle of my second string and this is the end of my second string"]

python

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

python计算到一列数字的距离

我有一个DataFrame df,其中有一个整数列“ X”

df = pd.DataFrame({'X': [7, 2, 0, 3, 4, 2, 5, 0, 3, 4]})
Run Code Online (Sandbox Code Playgroud)

我需要计算df中每个值到前一个零的距离。

所以预期的输出将是

op = pd.DataFrame({'dist': [0 ,0, 0, 1, 2, 3, 4, 0, 1, 2]})
Run Code Online (Sandbox Code Playgroud)

我能够做一个for循环并实现逻辑,但是我想我有一种更pythonic的方式来做,而我却错过了。

python pandas

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

熊猫数据框,如何将多个列分组并为特定列应用总和并添加新的计数列?

给定一个数据帧df1,如下所示:

Col1    Col2    Col3    Col4    Col5
-------------------------------------
A       1       AA      10      Test1
A       1       AA      5       Test2
A       2       AB      30      Test3
B       4       FF      10      Test4
C       1       HH      4       Test7
C       3       GG      6       Test8
C       3       GG      7       Test9
D       1       AA      4       Test5
D       3       FF      6       Test6
Run Code Online (Sandbox Code Playgroud)
  • 我想按Col1,Col2和Col3分组

  • 添加新列数:每个组的大小

  • 添加新列Col4_sum:每个组中每个Col4的总和


输出需求

Col1    Col2    Col3    Count   Col4_sum
----------------------------------------
A       1       AA      2       15
A       2       AB      1       30
B       4       FF      1       10
C       1       HH …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

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

用熊猫数据框中另一列的值填充多列中的 Na

Pandas 版本0.23.4,python 版本3.7.1
我有一个数据框 df 如下

df = pd.DataFrame([[0.1, 2, 55, 0,np.nan],
                   [0.2, 4, np.nan, 1,99],
                   [0.3, np.nan, 22, 5,88],
                   [0.4, np.nan, np.nan, 4,77]],
                   columns=list('ABCDE'))
     A    B     C  D     E
0  0.1  2.0  55.0  0   NaN
1  0.2  4.0   NaN  1  99.0
2  0.3  NaN  22.0  5  88.0
3  0.4  NaN   NaN  4  77.0
Run Code Online (Sandbox Code Playgroud)

我想替换列中的 Na 值BC列“A”中的值。

预期输出是

     A   B      C    D      E 
0   0.1  2.0    55.0   0    NaN 
1   0.2  4.0    0.2 …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pandas fillna

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

根据CSV文件名命名数据框?

尝试批量分析一个充满.csv文件的文件夹,然后根据.csv名称再次将其保存。但是,我在提取文件名并将其分配给数据帧(df)时遇到了麻烦。

import glob
import pandas as pd

path = r'csv_in'
allFiles = glob.glob(path + '/*.csv')

for file_ in allFiles:   
    df = pd.read_csv(file_, header=0)
    df.name = file_
    print(df.name)
Run Code Online (Sandbox Code Playgroud)

我得到的打印结果是“ csv_in / *。csv”。

我正在寻找的结果只是csv名称“ * .csv”

python glob pandas

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

根据正值和负值对数据框列的值进行排序?

我有 df 列,由 +ve 和 -ve 列组成。

       A          B
0      a           5
1      b         -13
2      c          15
3      d         -10
Run Code Online (Sandbox Code Playgroud)

有没有办法对 +ve 值升序和 -ve 值降序进行排序

       A          B
0      a           5
1      c          15
2      d         -10
3      b         -13
Run Code Online (Sandbox Code Playgroud)

python pandas

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

如何在python中使用selenium下载pdf文件

我正在尝试使用 selenium 从网站下载 pdf 文件,但我能够打开文件,但不能使用代码自动下载。

代码:

chrome_profile = webdriver.ChromeOptions()
profile = {"download.default_directory": "C:\Users\Downloads",
   "download.prompt_for_download": False,
   "download.directory_upgrade": True,
   "plugins.plugins_disabled": ["Chrome PDF Viewer"]}
chrome_profile.add_experimental_option("prefs", profile)
Run Code Online (Sandbox Code Playgroud)

请建议。先感谢您

python selenium google-chrome python-2.7

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

如何遍历行中的列以查找满足某些条件的第一个列

我需要遍历数据框行中的列,以找到第一个完全大写的单元格(在此给定的行中)。我需要对数据帧中的所有行重复此操作,最后输出一个数据帧,其中包含一列,每一行都具有相应的第一个大写字符串。

举个例子-这可能是输入数据框:

+-----+--------+--------+--------+------+
|  0  |   1    |   2    |   3    |  4   |
+-----+--------+--------+--------+------+
| a   | Amount | SEQ    | LTOTAL | None |
| BBc | LCALC  | None   | None   | None |
| c   | LCALC  | None   | None   | None |
| Dea | RYR    | LTOTAL | None   | None |
+-----+--------+--------+--------+------+
Run Code Online (Sandbox Code Playgroud)

我需要在单独的数据框中输出以下内容:

+-------+
| SEQ   |
| LCALC |
| LCALC |
| RYR   |
+-------+
Run Code Online (Sandbox Code Playgroud)

python pandas

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

在for循环中使用if ... else返回字符串

所以在这里我试图将字符串' ABcsad f!,'转换为
string 'abcsadf',所以基本上我正在尝试将空格和非alpha替换为'',但是我的代码根本不起作用...

s = ' ABcsad f!,'

def norm(s):
    b=''
    i=0
    for i in range(0,len(s)+1):
        if (s[i].isalpha() is False) or (s[i].isspace() is False) :
            return b+=''
        else:
            return b+=s[i]
        i = i+1   

print(norm(s))
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我哪里出了问题?

python for-loop python-3.x

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

使用Python熊猫将(美国)负数转换为-欧洲人

我正在从美国系统获取数据。我在CSV中得到的数字是字符串“(100)”,我必须将其转换为-100整数。我在数据框中有N个列,我必须对所有列都这样做。

我现在正在做的是将所有括号替换为空和负值符号。这不是最佳解决方案,因为它正在转换数据帧中的所有给定值。

import pandas as pd

df=pd.read_csv('American.csv',  thousands=r',')

df=df.apply(lambda z: z.astype(str).str.replace(')',''))
df=df.apply(lambda z: z.astype(str).str.replace('(','-'))
Run Code Online (Sandbox Code Playgroud)

我的期望:

"(100)" -> -100

"Nick (Jones)" ->"Nick **(Jones)**"
Run Code Online (Sandbox Code Playgroud)

我得到的是:

"(100)" -> -100

"Nick (Jones)" ->"Nick **-Jones**"
Run Code Online (Sandbox Code Playgroud)

我需要一个代码,用所有列的数字进行必要的转换,但又不打扰其他值。

python dataframe pandas

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