对于python中的numpy矩阵
from numpy import matrix
A = matrix([[1,2],[3,4]])
Run Code Online (Sandbox Code Playgroud)
如何找到此矩阵的行(或列)的长度?同样,我怎么知道行数或列数?
到目前为止,我发现的唯一解决方案是:
len(A)
len(A[:,1])
len(A[1,:])
Run Code Online (Sandbox Code Playgroud)
它分别返回2,2和1.从此我收集到的len()将返回行数,因此我总是可以使用转置,len(A.T)列数.然而,这感觉不令人满意和任意,因为在阅读该行时len(A),这应该返回行数并不是很明显.它实际上与len([1,2])2D python数组的工作方式不同,因为它会返回2.
那么,有没有更直观的方法来找到矩阵的大小,或者这是我最好的?
我有一个带有pandas MultiIndex的Dataframe:
In [1]: import pandas as pd
In [2]: multi_index = pd.MultiIndex.from_product([['CAN','USA'],['total']],names=['country','sex'])
In [3]: df = pd.DataFrame({'pop':[35,318]},index=multi_index)
In [4]: df
Out[4]:
pop
country sex
CAN total 35
USA total 318
Run Code Online (Sandbox Code Playgroud)
然后我从该DataFrame中删除一些行:
In [5]: df = df.query('pop > 100')
In [6]: df
Out[6]:
pop
country sex
USA total 318
Run Code Online (Sandbox Code Playgroud)
但是当我咨询MutliIndex时,它仍然有两个国家的水平.
In [7]: df.index.levels[0]
Out[7]: Index([u'CAN', u'USA'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
我可以用一种相当奇怪的方式解决这个问题:
In [8]: idx_names = df.index.names
In [9]: df = df.reset_index(drop=False)
In [10]: df = df.set_index(idx_names)
In [11]: df
Out[11]:
pop
country sex …Run Code Online (Sandbox Code Playgroud) 我有一个DataFrame在pandas同一个名为列df.strings与文本字符串.我想在其自己的行上获取这些字符串的单个单词,其他列的值相同.例如,如果我有3个字符串(和一个不相关的列,时间):
Strings Time
0 The dog 4Pm
1 lazy dog 2Pm
2 The fox 1Pm
Run Code Online (Sandbox Code Playgroud)
我想要包含字符串中的单词的新行,但是包含其他相同的列
Strings --- Words ---Time
"The dog" --- "The" --- 4Pm
"The dog" --- "dog" --- 4Pm
"lazy dog"--- "lazy"--- 2Pm
"lazy dog"--- "dog" --- 2Pm
"The fox" --- "The" --- 1Pm
"The fox" --- "fox" --- 1Pm
Run Code Online (Sandbox Code Playgroud)
我知道如何从字符串中分割出单词:
string_list = '\n'.join(df.Strings.map(str))
word_list = re.findall('[a-z]+', Strings)
Run Code Online (Sandbox Code Playgroud)
但是,如何在保留索引和其他变量的同时将这些内容放入数据框中?我使用的是Python 2.7和pandas 0.10.1.
编辑:我现在了解如何使用此问题中的 groupby扩展行:
def f(group):
row = group.irow(0)
return DataFrame({'words': …Run Code Online (Sandbox Code Playgroud) 我正在使用 reportlab 2.6 的 ListFlowable 制作带有彩色圆圈项目符号的项目符号列表。但是,我希望项目符号出现在文本旁边,而不是与前面的非缩进文本对齐。我试图打开 ListFlowable 源代码,但在那里找不到太多内容。这是我所拥有的:
from reportlab.platypus import Paragraph, ListFlowable, ListItem, SimpleDocTemplate, Frame
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.colors import CMYKColor
doc = SimpleDocTemplate("SOtest.pdf")
styles = getSampleStyleSheet()
Story = []
Story.append(Paragraph("Header Text, I dont want the bullets directly below the H"
,styles['Normal']))
my_list = ListFlowable(
[
ListItem(Paragraph("Line 1",styles['Normal'])
,bulletColor = CMYKColor(0.81, 0.45, 0.53, 0.23)
,value = 'circle'
),
ListItem(Paragraph("Line 2",styles['Normal'])
,bulletColor = CMYKColor(0.81, 0.45, 0.53, 0.23)
,value = 'circle'
)
],
bulletType='bullet',
start='circle'
)
Story.append(my_list)
doc.build(Story) …Run Code Online (Sandbox Code Playgroud) 我有几个亚马逊 s3 存储桶,不同的客户端通常使用 sftp 将文件上传到这些存储桶。由于不同的客户端以不同的方式访问存储桶,我无法准确预测他们将如何上传文件。我希望在新文件到达时收到通知,因此当任何 s3 对象创建甚至被触发时,我都会将存储桶写入 SNS 主题。但是,对于某些客户端,这会为每个文件创建产生 3 个不同的事件:
ObjectCreated:Put文件大小为 0的事件ObjectCreated:Copy具有完整文件大小的事件ObjectCreated:CompleteMultiPartUpload,也有完整的文件大小。我有一个 lambda 函数监听这个事件,我希望它每个文件只执行一次。有什么可以区分这些重复事件吗?
我不想让 s3 存储桶只写Copyor CompleteMultiPartUploads,因为我担心有些客户端只会触发其中一个(除非有一些保证每个 s3 文件创建都会触发这些触发器,但我没有在任何地方的文档中都看到过)。
我真的不想用我的 lambda 将接收到的文件记录到数据库中,因为这会使检测客户端何时合法地重新上传同名文件变得具有挑战性。
我确定我的 lambda 工作正常,这些是不同的事件,而不是重试
我有一个Scala spark DataFrame:
df.select($"row_id", $"array_of_data").show
+----------+--------------------+
| row_id | array_of_data |
+----------+--------------------+
| 0 | [123, ABC, G12] |
| 1 | [100, 410] |
| 2 | [500, 300, ...] |
Run Code Online (Sandbox Code Playgroud)
我想爆炸这些数组,以便每个元素都在不同的行中,但我还想标记哪一行对应于数组的第一个元素:
+----------+--------------------+----------+----------+
| row_id | array_of_data | exploded | is_first |
+----------+--------------------+----------+----------+
| 0 | [123, ABC, G12] | 123 | Yes |
| 0 | [123, ABC, G12] | ABC | No |
| 0 | [123, ABC, G12] | G12 | No |
Run Code Online (Sandbox Code Playgroud)
为实现这一点,我使用了explode函数,并希望第一行对应第一个数据元素: …
我正在寻找一种方法来确定pandas数据框的一个列或一组列是否唯一地标识该数据框的行。我已经在Stata中看到了这个称为isid函数的函数。
我能想到的最好的方法是使用集合理解来获取列的子集的唯一值,并断言集合中的值与数据帧中的行一样多:
subset = df[["colA", "colC"...]]
unique_vals = {tuple(x) for x in subset.values}
assert(len(unique_vals) == len(df))
Run Code Online (Sandbox Code Playgroud)
这不是世界上最优雅的答案,所以我想知道是否有内置函数可以执行此操作,或者是否可以测试列的子集是否为唯一值索引。
我有一个Map,如果不为空,我希望有不同的行为。我不知道如何匹配一个空的地图。我已经查阅了其他答案和模式匹配文档,但无法弄清楚。我认为这Nil可能会像列表一样工作,但事实并非如此。我也似乎无法对阵Map(),Map[String, String].empty或Map[String, String]()
myMap match {
// doesn't work
case Nil => false
case _ => true
}
myMap match {
// also doesn't work
case Map[String, String]() => false
case _ => true
}
Run Code Online (Sandbox Code Playgroud)
此答案中的方法似乎对于检查Map是否为空是过大的。此外,接受的答案还会检查,是否Map包含要匹配的任何地图,我认为这不适用于我的情况
python ×4
pandas ×3
scala ×2
amazon-s3 ×1
amazon-sns ×1
apache-spark ×1
aws-lambda ×1
bulletedlist ×1
dataframe ×1
matrix ×1
numpy ×1
reportlab ×1