在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) 在熊猫中如何从一个:
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)
我在其他答案中尝试过解决方案,例如这里和这里,但似乎没有人做我想要的.
基本上,我想用列交换行并删除索引,但是怎么做呢?
拥有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 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) 我正在尝试制作一个图形,其中我希望有标签,并在 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) 具有以下数据框:
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)
如果我们要选择 …
我有一组3或4个单独的Perl脚本,它们曾经是一个简单的管道的一部分,但我现在试图将它们组合在一个脚本中以便于使用(现在没有子程序功能).问题是在不同的脚本中定义了几个具有相同名称的变量.我找到的解决方法是给这些变量赋予不同的名称,但它可能开始变得混乱,并且可能不是这样做的正确方法.我知道全局和局部变量的概念,但我不太明白它们是如何工作的.
处理这类变量有什么经验法则吗?您是否知道任何可以对变量范围有所了解或有任何建议的好文档?
谢谢.
编辑:我已经使用"使用警告;使用严格;" 并使用"my"声明变量.问题实际上可能与范围块的定义以及如何使它们彼此独立有关...
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语法是什么?
我有几个文件(其中的数量是不确定的),我想同时读取,逐行或分块,做一些处理并移动到所有文件中的下一行(或块)。我想我的要求或多或少与这个问题中的要求相似。但是,在我的情况下,文件可以有不同的行数,并且在尝试实现诸如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) 我有三个哈希,我想将每个哈希分解成一个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) 我试图使用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)