小编avi*_*iss的帖子

裁剪图像保持纵横比

我有一个包含文字的图像列表,但我收到的图像有不同的尺寸(全部大于150像素).我需要将它们全部裁剪为150x100px但保持正确的宽高比.有人可以建议解决这个问题的最佳方法吗?谢谢!

HTML:

<ul>        
    <div class="post" id="post">
    <div>
        <li>
        <img class="TextWrap" src="{{ picture }}">
        <a href="{{ link }}">{{ message }}</a><p>
        {{ time }}
        </li>   
    </div>
</ul> 
Run Code Online (Sandbox Code Playgroud)

CSS:

.post {
    width: 500px;
    margin-top: 15px;
    float: left;
}

.post img {
    width: 150px;
    height: 100px;
    margin-bottom: 15px;
    margin-right: 20px;
}

.TextWrap {
    float: left;
}
Run Code Online (Sandbox Code Playgroud)

html css

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

隐藏Seaborn Pairplot中的图例

我想隐藏Seaborn对偶图例。官方文档没有提及关键字图例。我尝试使用的所有方法plt.legend均无效。请提出最佳的前进方式。谢谢!

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

test = pd.DataFrame({
    'id': ['1','2','1','2','2','6','7','7','6','6'],
    'x': [123,22,356,412,54,634,72,812,129,110],
    'y':[120,12,35,41,45,63,17,91,112,151]})
sns.pairplot(x_vars='x', y_vars="y", 
                 data=test,
                 hue = 'id', 
                 height = 3)
Run Code Online (Sandbox Code Playgroud)

matplotlib python-3.x seaborn

7
推荐指数
4
解决办法
6704
查看次数

有选择地用 Python 抓取维基百科表格

我在整理 wiki 表格时遇到了麻烦,希望以前做过的人可以给我建议。从 List_of_current_heads_of_state_and_government 我需要国家(使用下面的代码),然后只第一次提到国家元首+他们的名字。我不确定如何隔离第一次提及,因为它们都出现在一个单元格中。我试图提取他们的名字给了我这个错误:IndexError: list index out of range. 将感谢您的帮助!

import requests
from bs4 import BeautifulSoup

wiki = "https://en.wikipedia.org/wiki/List_of_current_heads_of_state_and_government"
website_url = requests.get(wiki).text
soup = BeautifulSoup(website_url,'lxml')

my_table = soup.find('table',{'class':'wikitable plainrowheaders'})
#print(my_table)

states = []
titles = []
names = []
for row in my_table.find_all('tr')[1:]:
    state_cell = row.find_all('a')[0]  
    states.append(state_cell.text)
print(states)
for row in my_table.find_all('td'):
    title_cell = row.find_all('a')[0]
    titles.append(title_cell.text)
print(titles)
for row in my_table.find_all('td'):
    name_cell = row.find_all('a')[1]
    names.append(name_cell.text)
print(names)
Run Code Online (Sandbox Code Playgroud)

理想的输出将是熊猫 df:

State | Title | Name |
Run Code Online (Sandbox Code Playgroud)

wikipedia beautifulsoup web-scraping python-3.x

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

使用 BeautifulSoup 提取文本时在段落之间添加空格

我需要从新闻文章中提取有用的文本。我用 BeautifulSoup 做这件事,但输出把一些段落粘在一起,这阻止了我进一步分析文本。

我的代码:

import requests
from bs4 import BeautifulSoup
r = requests.get("http://www.bbc.co.uk/news/uk-england-39607452")
soup = BeautifulSoup(r.content, "lxml")

# delete unwanted tags:
for s in soup(['figure', 'script', 'style']):
    s.decompose()

article_soup = [s.get_text() for s in soup.find_all(
                'div', {'class': 'story-body__inner'})]
article = ''.join(article_soup)
print(article)
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样(只有前 5 个句子):

在耶路撒冷被刺死的英国学生汉娜·布拉登 (Hannah Bladon) 的家人表示,他们对这场“毫无意义和悲惨的袭击”感到“震惊”。 20 岁的布拉登女士于耶稣受难日在耶路撒冷的一辆电车上遭到袭击。她去世时在耶路撒冷希伯来大学学习,那天早上一直在参与考古挖掘。布拉登女士的胸部被刺了几次,在医院里死亡。她遭到一名男子的袭击,他从包里拿出一把刀,在老城附近的电车上反复刺伤她,因为基督徒庆祝耶稣受难节和犹太人庆祝逾越节,电车很忙。

我尝试在某些标点符号后添加一个空格,例如“.”、“?”和“!”。

article = article.replace(".", ". ")
Run Code Online (Sandbox Code Playgroud)

它适用于段落(尽管我相信应该有更聪明的方法来做到这一点),但不适用于文章不同部分的字幕,这些部分最终没有任何标点符号。它们的结构如下:

</p>
<h2 class="story-body__crosshead">
Subtitle text
</h2>
<p>
Run Code Online (Sandbox Code Playgroud)

我将不胜感激您的建议。

PS:当我“加入”article_soup 时添加一个空格没有帮助。

beautifulsoup python-2.7

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

Pandas - group, sort and keep first row

我有一个数据框,我需要对其进行分组id,然后对time每个数据框进行排序,并仅保留第一条记录id。尝试了其他答案中建议的不同方法,但无法获得正确的结果。将感谢您的帮助!

test = pd.DataFrame({'id' : [1,1,1,
                           2,2,
                           3,3,3,3],
                   'ref'  : ["search","social","direct",
                          "social","direct",
                          "direct",'social','social','social'],
                   'media':['video', 'page', 'video',
                           'page', 'pic', 
                            'pic', 'video', 'page', 'video'],
                   'time': ['2019-04-10 19:00:00.569', '2019-04-10 00:10:00.569', '2019-04-10 00:10:20.569',
                          '2019-04-10 12:10:00.569','2019-04-10 11:10:00.569',
                          '2019-04-10 22:10:00.569','2019-04-10 14:10:00.569','2019-04-10 14:30:00.569','2019-04-10 15:10:00.569']})
Run Code Online (Sandbox Code Playgroud)

预期结果:

    id  ref     media
0   1   social  page
1   2   direct  pic
2   3   social  video
Run Code Online (Sandbox Code Playgroud)

python group-by dataframe pandas pandas-groupby

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

升级 matplotlib 后出现“ValueError:RGBA 值应在 0-1 范围内”

我已经升级到3.0.2 matplotlib和低于我的脚本中使用我的3D绘图现在抛出这个错误:ValueError: RGBA values should be within 0-1 range。用 2.0.2 版本测试过,它在那里工作......试图谷歌搜索类似的问题,但找不到解决方法,所以向这个聪明的社区寻求帮助......

test = pd.DataFrame({'cluster': ["0", "1", "2"],
    'x': [2, 3, 1],
    'y': [10, 5, -2],
    'z': [-10, -5, 2]})

fig = plt.figure(figsize=(7,7))

ax = Axes3D(fig) 

x=test['x']
y=test['y']
z=test['z']
clusters = test['cluster']

ax.scatter(x, y, z, c=clusters, marker='x', cmap='tab20b', depthshade=False)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

plt.show()
Run Code Online (Sandbox Code Playgroud)

matplotlib python-3.x

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

熊猫:根据百分比条件过滤数据框

我有一个数据框架df,其中包含一些基本的网络统计信息,这些统计信息按“网页浏览量”(PV)排名:

URL  PVs
1    1500
2    1200
3    900
4    700
:
100  25
Run Code Online (Sandbox Code Playgroud)

我正在尝试过滤和计算造成不同页面浏览量(PV)百分比的URL数量。说,我想知道有多少个网址带来了90%的PV(或10%)。

我计算了百分位数:

df.quantile(np.linspace(.1, 1, 9, 0))
Run Code Online (Sandbox Code Playgroud)

而且我知道我可以遍历这样的行(这样我可以总结一下):

for index, row in df.iterrows():
    print row['PVs']
Run Code Online (Sandbox Code Playgroud)

但是我无法弄清楚在达到某个阈值时如何停止。将感谢您的帮助!

percentile python-2.7 pandas

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

如何在matplotlib中控制科学计数法?

这是我要绘制的数据框:

my_dic = {'stats': {'apr': 23083904,
                       'may': 16786816,
                       'june': 26197936,
                     }}
my_df = pd.DataFrame(my_dic)
my_df.head()
Run Code Online (Sandbox Code Playgroud)

这是我的绘图方式:

ax = my_df['stats'].plot(kind='bar',  legend=False)
ax.set_xlabel("Month", fontsize=12)
ax.set_ylabel("Stats", fontsize=12)
ax.ticklabel_format(useOffset=False) #AttributeError: This method only works with the ScalarFormatter.
plt.show()
Run Code Online (Sandbox Code Playgroud)

剧情:

在此处输入图片说明

我想控制科学计数法。如其他问题所建议,我试图通过此行抑制它,plt.ticklabel_format(useOffset=False)但出现此错误- AttributeError: This method only works with the ScalarFormatter。理想情况下,我想以(mln)显示数据。

matplotlib python-2.7 pandas

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

熊猫:按等距离分组

这是我的数据框的一个例子:

df_lst = [
  {"wordcount": 100, "Stats": 198765, "id": 34},
     {"wordcount": 99, "Stats": 98765, "id": 35},
     {"wordcount": 200, "Stats": 18765, "id": 36},
     {"wordcount": 250, "Stats": 788765, "id": 37},
     {"wordcount": 345, "Stats": 12765, "id": 38},
     {"wordcount": 456, "Stats": 238765, "id": 39},
     {"wordcount": 478, "Stats": 1934, "id": 40},
     {"wordcount": 890, "Stats": 19845, "id": 41},
     {"wordcount": 812, "Stats": 1987, "id": 42}]
df = pd.DataFrame(df_lst)
df.set_index('id', inplace=True)
df.head()
Run Code Online (Sandbox Code Playgroud)

DF:

    Stats   wordcount
id      
34  198765  100
35  98765   99
36  18765   200
37  788765  250 …
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

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

使用 seaborn 绘制多个直方图

我有一个包含 36 列的数据框。我想使用 seaborn 一次性(6x6)为每个特征绘制直方图。基本上是繁殖,df.hist()但带有seaborn。我下面的代码仅显示第一个功能的图,所有其他功能都为空。

在此处输入图片说明

测试数据框:

df = pd.DataFrame(np.random.randint(0,100,size=(100, 36)), columns=range(0,36))
Run Code Online (Sandbox Code Playgroud)

我的代码:

import seaborn as sns
# plot
f, axes = plt.subplots(6, 6, figsize=(20, 20), sharex=True)
for feature in df.columns:
    sns.distplot(df[feature] , color="skyblue", ax=axes[0, 0])
Run Code Online (Sandbox Code Playgroud)

plot histogram python-3.x pandas seaborn

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

连接两个不同大小的数据帧(熊猫)

我有两个具有唯一ids 的数据框。他们共享一些列,但不是全部。我需要创建一个组合数据帧,其中将包含id来自第二个数据帧的缺失s 的行。尝试合并和连接,没有运气。可能已经太晚了,我的大脑停止工作了。将感谢您的帮助!

   df1 = pd.DataFrame({
        'id': ['a','b','c','d','f','g','h','j','k','l','m'],
        'metric1': [123,22,356,412,54,634,72,812,129,110,200],
        'metric2':[1,2,3,4,5,6,7,8,9,10,11]
        })


df2 = pd.DataFrame({
    'id': ['a','b','c','d','f','g','h','q','z','w'],
    'metric1': [123,22,356,412,54,634,72,812,129,110]
    })
df2
Run Code Online (Sandbox Code Playgroud)

结果应如下所示:

    id  metric1 metric2
0   a   123     1.0
1   b   22      2.0
2   c   356     3.0
3   d   412     4.0
4   f   54      5.0
5   g   634     6.0
6   h   72      7.0
7   j   812     8.0
8   k   129     9.0
9   l   110     10.0
10  m   200     11.0
11  q   812     NaN
12  z   129 …
Run Code Online (Sandbox Code Playgroud)

python-3.x pandas

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

Pandas:在所有列中找到最大值并打印此行

我有一个包含标准化和缩放数据的大型数据框,其范围应在 0-1 之间。但是当我打印它的最大值时,我得到 - 1.000000002。describe()方法不显示此值。所以我试图找出问题并想打印有问题的一行。我遇到的所有其他答案都在谈论打印具有特定列最大值的行。如何打印包含整个数据帧最大值的行?将感谢您的帮助!

test = pd.DataFrame({'att1'  : [0.1, 0.001, 0.0001,
                            1, 2,
                            0.5, 0, -1, -2],
                   'att2':[0.01, 0.0001, 0.00001,
                            1.1, 2.2,
                            2.37, 0, -1.5, -2.5]})
test.max().max()
Out: 2.37000
Run Code Online (Sandbox Code Playgroud)

想要的结果:

    att1    att2
5   0.5     2.37
Run Code Online (Sandbox Code Playgroud)

UPD: 我更新了测试数据框,因为它引起了混乱(我的错!)。我需要打印一行,其中包含整个数据帧的最大值。

python-3.x pandas

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

计算熊猫的月流失率

这是我的数据框中的数据示例:

test = pd.DataFrame({
    'month': [1,2,3,4,5,6,7,8,9],
    'new': [23,45,67,89,12,34,56,90,12],
    'drop': [2,4,7,9,1,4,6,9,1],
})

month   new drop
0   1   23  2
1   2   45  4
2   3   67  7
3   4   89  9
4   5   12  1
5   6   34  4
6   7   56  6
7   8   90  9
8   9   12  1
Run Code Online (Sandbox Code Playgroud)

我需要计算每月的流失率。我需要对列中的 2 行求和new,然后将值drop除以这个总和(以 % 为单位)。

    month 1: 2*100/23
    month 2: 4*100/(23+45-2)
    month 3: 7*100/(23+45+67-2-4)

    etc.
Run Code Online (Sandbox Code Playgroud)

任何人都可以提出一种优雅的方式来做到这一点吗?

python-3.x pandas churn

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