小编chi*_*n88的帖子

如何使用正则表达式拆分列以将尾随大写字母移动到单独的列中?

我正在尝试使用正则表达式拆分列,但似乎无法正确拆分。我正在尝试将所有尾随大写字母移动到单独的列中。所以我得到了连续 2-4 个大写字母的所有大写字母。但是,它只会'Name''Team'列为空白时离开列。

这是我的代码:

import pandas as pd

url = "https://www.espn.com/nba/stats/player/_/table/offensive/sort/avgAssists/dir/desc"

df = pd.read_html(url)[0].join(pd.read_html(url)[1])
df[['Name','Team']] = df['Name'].str.split('[A-Z]{2,4}', expand=True)  
Run Code Online (Sandbox Code Playgroud)

我要这个:

print(df.head(5).to_string())
   RK             Name POS  GP   MIN   PTS  FGM   FGA   FG%  3PM  3PA   3P%  FTM  FTA   FT%  REB   AST  STL  BLK   TO  DD2  TD3    PER
0   1  LeBron JamesLA  SF  35  35.1  24.9  9.6  19.7  48.6  2.0  6.0  33.8  3.7  5.5  67.7  7.9  11.0  1.3  0.5  3.7   28    9  26.10
1   2   Ricky RubioPHX  PG  30  32.0  13.6 …
Run Code Online (Sandbox Code Playgroud)

python regex pandas

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

Pandas - 与删除重复项相反,先保留

first我熟悉如何删除重复行,然后使用, last,参数none。没有什么太复杂的,并且有很多例子(即这里)。

但是,我正在寻找的是有一种方法可以找到重复项,但不是删除所有重复项并保留第一个,如果我有重复项,请保留所有重复项但删除第一个:

因此,我不想“如果重复则删除,保留第一个”,而是“如果重复则保留,首先删除”

例子:

给定这个数据框,并查看cost列中的重复项:

    ID name type cost
0    0    a   bb    1
1    1    a   cc    2 <--- there are duplicates, so drop this row
2  1_0    a   dd    2
3    2    a   ee    3 <--- there are duplicates, so drop this row
4  2_0    a   ff    3
5  2_1    a   gg    3
6  2_2    a   hh    3
Run Code Online (Sandbox Code Playgroud)

如果列中存在重复项cost,则只需删除第一个出现的项,但保留其余的项。

所以我的输出是:

    ID name type cost
0    0    a …
Run Code Online (Sandbox Code Playgroud)

python pandas drop-duplicates

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

使用python在Excel中创建数据透视表

我编写了以下代码以在现有Excel工作表中创建数据透视表:

import win32com.client as win32
win32c = win32.constants
import sys
import itertools
tablecount = itertools.count(1)

def addpivot(wb,sourcedata,title,filters=(),columns=(),
         rows=(),sumvalue=(),sortfield=""):

    newsheet = wb.Sheets.Add()
    newsheet.Cells(1,1).Value = title
    newsheet.Cells(1,1).Font.Size = 16
    tname = "PivotTable%d"%tablecount.next()
    pc = wb.PivotCaches().Add(SourceType=win32c.xlDatabase,
                             SourceData=sourcedata)
    pt = pc.CreatePivotTable(TableDestination="%s!R4C1"%newsheet.Name,
                         TableName=tname,
                         DefaultVersion=win32c.xlPivotTableVersion10)
    for fieldlist,fieldc in ((filters,win32c.xlPageField),
                        (columns,win32c.xlColumnField),
                        (rows,win32c.xlRowField)):
        for i,val in enumerate(fieldlist):
            wb.ActiveSheet.PivotTables(tname).PivotFields(val).Orientation = fieldc
            wb.ActiveSheet.PivotTables(tname).PivotFields(val).Position = i+1
    wb.ActiveSheet.PivotTables(tname).AddDataField(wb.ActiveSheet.PivotTables(tname).
                                         PivotFields(sumvalue),sumvalue,win32c.xlSum)


def runexcel():
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    #excel.Visible = True
    try:
        wb = excel.Workbooks.Open('18.03.14.xls')
    except:
        print "Failed to open spreadsheet 18.03.14.xls"
        sys.exit(1)
    ws = wb.Sheets('defaulters') …
Run Code Online (Sandbox Code Playgroud)

python excel vba pywin32

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

python rstrip或通过字符模式删除字符串的结尾

我试图在此列中删除字符串的结尾.我已经看过如何在一个字符串的末尾rstrip一个特定的字符或一定数量的字符,但是你如何根据一个模式来做呢?

我想删除'team'列中的字符串的整个末尾,我们看到小写字母后面跟着大写字母.然后从大写开始删除.我想要以下'team'专栏:

   team                              pts/g
St. Louis RamsSt. Louis             32.875
Washington RedskinsWashington       27.6875
Minnesota VikingsMinnesota          24.9375
Indianapolis ColtsIndianapolis      26.4375
Oakland RaidersOakland              24.375
Carolina PanthersCarolina           26.3125
Jacksonville JaguarsJacksonville    24.75
Chicago BearsChicago                17.0
Green Bay PackersGreen Bay          22.3125
San Francisco 49ersSan Francisco    18.4375
Buffalo BillsBuffalo                20.0
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

   team                              pts/g
St. Louis Rams                      32.875
Washington Redskins                 27.6875
Minnesota Vikings                   24.9375
Indianapolis Colts                  26.4375
Oakland Raiders                     24.375
Carolina Panthers                   26.3125
Jacksonville Jaguars                24.75
Chicago Bears                       17.0
Green Bay Packers                   22.3125
San …
Run Code Online (Sandbox Code Playgroud)

python strip

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

tqdm - 为什么打印多行开始?

所以我使用tqdm包来输出进度条.控制台确实支持回车\r.我在其他帖子中找不到解决方案.

首先在新行上打印前几个迭代如下所示,它打印4个新行,然后最后在第五行,覆盖到单行开始.

为什么会这样?无论如何还是有关于如何防止这种情况的想法,所以它会从一开始就覆盖?

这是输出:

  0%|          | 0/240 [00:00<?, ?it/s]
  0%|          | 1/240 [00:01<04:59,  1.25s/it]
  1%|          | 2/240 [00:02<04:43,  1.19s/it]
  1%|?         | 3/240 [00:03<04:44,  1.20s/it]
  13%|??        | 32/240 [00:31<03:09,  1.10it/s]
Run Code Online (Sandbox Code Playgroud)

python progress-bar tqdm

6
推荐指数
0
解决办法
947
查看次数

Pandas - 根据列值移动某些行的特定列

因此,我有一个关于 2005 年至 2016 年 NFL 统计数据的大数据集。问题是,2009 年添加了一个新类别,因此我的列在 2009 年之前偏移。我希望所有具有“NFL Season”列 < 的行2009 赛季向右移动,但只有第 11 列到倒数第二列(因此 [11:-1])。

我设法以这种方式做到这一点,但迭代所有这些行(大约 10,000)需要很长时间。有没有更快的方法来做到这一点?我试图看看是否有一种方法可以使用.isinwhere 我可以说该行是否在我的“rows_to_shift”中,但无法弄清楚它是如何工作的。

就像我说的,一定有一种更好或更有效的方法,而我在学习 pandas 时还没有意识到。

这是我一直在使用的代码:

rows_to_shift = rb_df[rb_df['NFL Season'] < 2009].index.tolist()

for i in rows_to_shift:
    rb_df.iloc[[i],11:-1] = rb_df.iloc[[i],11:-1].shift(1,axis=1)
Run Code Online (Sandbox Code Playgroud)

python pandas

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

在所有子图中绘制水平线

我正在使用 python 并找到了几个解决方案来做到这一点。但它需要创建每个单独的子图。但是因为有一个参数你可以做subplot=True,我想知道有没有办法在一行代码中做到这一点......你怎么说sharey=True,你能让它“共享”一个水平常量吗?

我一直在玩它。起初,它只显示在最后一张图表上,但现在根本没有显示。

import matplotlib.pyplot as plt

line_up_points.plot(subplots=True, layout=(3, 3),sharey=True, figsize=(18, 12))
plt.legend(loc='best')
plt.axhline(y=125.08, color='r')
Run Code Online (Sandbox Code Playgroud)

这是它显示的内容:

在此处输入图片说明

但我想在 y=125.08 处的每个子图上都有一条水平线

没有单独创建 7 个不同图形的任何想法?

python plot subplot

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

Pandas - 用 groupby 扩展均值

我试图得到一个扩大的平均值。我可以在迭代和“分组”时仅通过按特定值过滤来使其工作,但这样做需要很长时间。我觉得这应该是一个使用 groupby 的简单应用程序,但是当我这样做时,它只是对整个数据集进行扩展,而不是仅对 grouby 中的每个组进行扩展。

举个简单的例子:

我想采用这个(在这种特殊情况下,按“玩家”和“年份”分组),并得到一个扩大的平均值。

player  pos year    wk  pa  ra
a       qb  2001    1   10  0       
a       qb  2001    2   5   0
a       qb  2001    3   10  0
a       qb  2002    1   12  0
a       qb  2002    2   13  0
b       rb  2001    1   0   20
b       rb  2001    2   0   17
b       rb  2001    3   0   12
b       rb  2002    1   0   14
b       rb  2002    2   0   15
Run Code Online (Sandbox Code Playgroud)

要得到:

player  pos year    wk  pa  ra …
Run Code Online (Sandbox Code Playgroud)

pandas pandas-groupby

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

Python OpenCV - 删除标题栏,工具栏和状态栏

我找到了关于C++的文档,但对python并不多.

在python中显示的基本代码是:

import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('messi.jpg',0)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

要显示下面的图像.但是我该怎么做呢

在此输入图像描述

看起来像这样?

在此输入图像描述

我也想保持这个大小.所以我读过一些人说要"全屏".我认为可能有用的唯一方法是"全屏,但然后重新调整大小?不确定这是否是一个解决方案(也试图找出如何做到这一点......)我是OpenCV的新手).

python opencv

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