小编Ped*_*roA的帖子

NumPy数组中每个字符串的长度

在NumPy中是否有任何内置操作返回数组中每个字符串的长度?

我认为任何NumPy字符串操作都不会这样做,这是正确的吗?

我可以用for循环来做,但也许有更高效的东西?

import numpy as np
arr = np.array(['Hello', 'foo', 'and', 'whatsoever'], dtype='S256')

sizes = []
for i in arr:
    sizes.append(len(i))

print(sizes)
[5, 3, 3, 10]
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x

11
推荐指数
4
解决办法
6795
查看次数

将行重塑为pandas数据帧中的列

在熊猫中如何从一个:

a = pd.DataFrame({'foo': ['m', 'm', 'm', 's', 's', 's'],
                    'bar': [1, 2, 3, 4, 5, 6]})
>>> a
   bar foo
0    1   m
1    2   m
2    3   m
3    4   s
4    5   s
5    6   s
Run Code Online (Sandbox Code Playgroud)

到b:

b = pd.DataFrame({'m': [1, 2, 3],
                    's': [4, 5, 6]})
>>> b
   m  s
0  1  4
1  2  5
2  3  6
Run Code Online (Sandbox Code Playgroud)

我在其他答案中尝试过解决方案,例如这里这里,但似乎没有人做我想要的.

基本上,我想用列交换行并删除索引,但是怎么做呢?

python python-3.x pandas

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

将两个布尔数组相交为True

拥有numpy数组

a = np.array([ True, False, False,  True, False], dtype=bool)
b = np.array([False,  True,  True,  True,  False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

如何才能使两者相交以便只True匹配值?我可以这样做:

a == b
array([False, False, False,  True,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

但最后一项是True(可以理解,因为两者都是False),而我希望结果数组True只在第4个元素中,如:

array([False, False, False,  True,  False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x

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

Python将字符串转换为浮点错误,带负数

如何将存储为字符串的负数转换为浮点数?

我在Python 3.6上遇到此错误,并且不知道如何克服它.

>>> s = '–1123.04'
>>> float(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: '–1123.04'
Run Code Online (Sandbox Code Playgroud)

python string floating-point python-3.x

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

轴中不同位置的刻度和标签

我正在尝试制作一个图形,其中我希望有标签,并在 x 轴上打勾,但位置不同。然而,似乎在设置第一个刻度之后,当尝试定义新的刻度时,以前的刻度被“遗忘”。例如:

import matplotlib.pyplot as plt

xs = [1, 4, 7, 11, 14, 17, 20, 23, 26, 29]
ys = [2.0, 1.667, 2.0, 0.333, 1.0, 0.667, 1.667, 1.0, 1.0, 1.0]

# where we want our labels
ticks1 = [5.0, 15.0, 25.0]
labs = ['A', 'B', 'C']

fig, ax = plt.subplots()
ax.plot(xs, ys)

# I think I have to define ticks here to position the labels...
ax.set_xticks(ticks1)
ax.set_xticklabels(labs)

ax.tick_params(axis='x', length=0)

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

在此输入图像描述

到目前为止一切都很好,符合想要的安排。ABC用于标记不同组的数据点,它们或多或少位于每个组的中间(之后我将添加垂直线以使这种分离更加明显),但刻度线应该反映数据,而不是这些人工标签。

但是,如果我现在尝试向同一轴添加一组不同的刻度,上面绘制的标签将迁移到新的刻度,并且不会保留其旧位置:

# ...but want to have …
Run Code Online (Sandbox Code Playgroud)

matplotlib python-3.x

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

按组阈值选择或删除行

具有以下数据框:

import pandas as pd
import numpy as np

df = pd.DataFrame(
            {'Beverage': ['Beer', 'Wine', 'Whisky'],
            'G1_1': [11, 5.1, 2.8],
            'G1_2': [6, 4, 0],
            'G1_3': [0, 2, 0],
            'G2_1': [0, 4.1, 0.8],
            'G2_2': [0, 6, 0.1],
            'G2_3': [0, 9.4, 0],
            }
                )

group1 = ['G1_1', 'G1_2', 'G1_3']

df

  Beverage  G1_1    G1_2    G1_3    G2_1    G2_2    G2_3
0   Beer    11.0    6       0       0       0       0
1   Wine    5.1     4       2       4.1     6.0     9.4
2   Whisky  2.8     0       0       0.8     0.1     0.0
Run Code Online (Sandbox Code Playgroud)

如果我们要选择 …

python pandas

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

Perl中正确的变量声明方式

我有一组3或4个单独的Perl脚本,它们曾经是一个简单的管道的一部分,但我现在试图将它们组合在一个脚本中以便于使用(现在没有子程序功能).问题是在不同的脚本中定义了几个具有相同名称的变量.我找到的解决方法是给这些变量赋予不同的名称,但它可能开始变得混乱,并且可能不是这样做的正确方法.我知道全局和局部变量的概念,但我不太明白它们是如何工作的.

处理这类变量有什么经验法则吗?您是否知道任何可以对变量范围有所了解或有任何建议的好文档?

谢谢.

编辑:我已经使用"使用警告;使用严格;" 并使用"my"声明变量.问题实际上可能与范围块的定义以及如何使它们彼此独立有关...

variables perl scope

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

awk匹配列中的多个模式

awk匹配一列中多个模式的正确语法是什么?有一个像这样的列式文件:

c11 c21 c31
c12 c22 c32
c13 c23 c33
Run Code Online (Sandbox Code Playgroud)

如何排除第二列中与c21和c22匹配的行.

使用grep,可以执行类似的操作(但不指定仅在第二列中匹配):

> egrep -w -v "c21|c22" bar.txt 
c13 c23 c33
Run Code Online (Sandbox Code Playgroud)

我尝试玩awk但无济于事:

> awk '$2 != /c21|c22/' bar.txt 
c11 c21 c31
c12 c22 c32
c13 c23 c33

> awk '$2 != "c21" || $2 != "c22"' bar.txt 
c11 c21 c31
c12 c22 c32
c13 c23 c33
Run Code Online (Sandbox Code Playgroud)

那么,正确的awk语法是什么?

awk

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

如何在Python中同时打开多个文件?

我有几个文件(其中的数量是不确定的),我想同时读取,逐行或分块,做一些处理并移动到所有文件中的下一行(或块)。我想我的要求或多或少与这个问题中的要求相似。但是,在我的情况下,文件可以有不同的行数,并且在尝试实现诸如ExitStack 之类的东西时,注意到所有文件将在其中一个关闭后立即关闭(可能是行数最少的那个) ,而我想继续处理其他文件(最终将空字符串分配给关闭文件的“行”)。这是可以完成的事情吗?如何?

#cat f1.txt
RNvn 40
AvOp 13
yEVA 94
oNGn 10
VZQU 88

#cat f2.txt
gSNn 4
zxHP 84
ebRw 70
NaxL 2
lXUb 49
PQzn 79
aIyN 88

#cat f3.txt
XXce 5
RMIq 4
FFEi 47
wuLZ 60
Run Code Online (Sandbox Code Playgroud)

简单的实现ExitStack,结果只有4行,因为filef3.txt只有4行:

flist = ['f1.txt', 'f2.txt', 'f3.txt']
with ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in flist]
    for lines in zip(*files):
        print(lines)

# prints
('RNvn 40\n', 'gSNn 4\n', 'XXce …
Run Code Online (Sandbox Code Playgroud)

file python-3.x

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

在数组的散列中拆分散列

我有三个哈希,我想将每个哈希分解成一个Hash of Arrays.每个都可以通过split函数传递给子程序,但是这需要调用3次相同的子程序.我试图遍历每个哈希并将它们拆分但没有成功.是否可以在不调用子程序的情况下执行此操作?我试过的代码是:

#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;

my %hash1 = (
    A => "AAAAAAAAAA",
    B => "AAAAANAAAA",
    C => "AAAAAXAAAA",
    D => "AAXAAAAAAA",
    E => "AAAAAAAAAX",
);

my %hash2 = (
    F => "BBBBBBBBBB",
    G => "BBBBBBBBBB",
    H => "BBXBBBBBBB",
    I => "BBBBBBBBBB",
    J => "AAAAANAAAA",
);

foreach my $ref ( \%hash1, \%hash2 ) {
    while ( my ($key, $value) = each %$ref) {
        @{ $ref->{$key} } = split (//, $value );
    }
}

print Dumper %hash1; …
Run Code Online (Sandbox Code Playgroud)

perl perl-data-structures

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

在同一个文件上进行多次替换 - awk

我试图使用awk单线程脚本在同一个文件上进行多次替换.用于变量赋值的文件如下:

> cat names 
1 Dusky
2 Flag
3 Mon
Run Code Online (Sandbox Code Playgroud)

我想在这个文件中做替换:

> cat file.txt 
  1        1   0.6248 0.3752 
  2        2   0.0430 0.9570 
  3        3   0.0624 0.9376
Run Code Online (Sandbox Code Playgroud)

我试过的是:

while read num name; do 
    awk -v J=$num -v R=$name '{if (match($1, J)) $2=R; print;}' file.txt; 
done < names
Run Code Online (Sandbox Code Playgroud)

但是此代码打印了要替换的每一行的输入文件.

1 Dusky 0.6248 0.3752
  2        2   0.0430 0.9570 
  3        3   0.0624 0.9376 
  1        1   0.6248 0.3752 
2 Flag 0.0430 0.9570
  3        3   0.0624 0.9376 
  1        1   0.6248 0.3752 
  2        2   0.0430 0.9570 
3 …
Run Code Online (Sandbox Code Playgroud)

perl awk replace

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