我正在尝试使用正则表达式拆分列,但似乎无法正确拆分。我正在尝试将所有尾随大写字母移动到单独的列中。所以我得到了连续 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) 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) 我编写了以下代码以在现有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) 我试图在此列中删除字符串的结尾.我已经看过如何在一个字符串的末尾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) 所以我使用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) 因此,我有一个关于 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 并找到了几个解决方案来做到这一点。但它需要创建每个单独的子图。但是因为有一个参数你可以做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 个不同图形的任何想法?
我试图得到一个扩大的平均值。我可以在迭代和“分组”时仅通过按特定值过滤来使其工作,但这样做需要很长时间。我觉得这应该是一个使用 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) 我找到了关于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的新手).