Pandas 的 concat 函数中的“级别”、“键”和名称参数是什么?

2024-01-01

问题

  • 我该如何使用pd.concat?
  • 是什么levels论据?
  • 是什么keys论据?
  • 是否有很多示例可以帮助解释如何使用所有参数?

Pandas' concat函数是瑞士军刀 https://en.wikipedia.org/wiki/Swiss_Army_knife合并公用事业。它有用的情况有很多。现有文档遗漏了一些可选参数的一些细节。其中有levels and keys论据。我开始弄清楚这些论点的作用。

我将提出一个问题,作为了解许多方面的门户pd.concat.

考虑数据框d1, d2, and d3:

import pandas as pd

d1 = pd.DataFrame(dict(A=.1, B=.2, C=.3), [2, 3])
d2 = pd.DataFrame(dict(B=.4, C=.5, D=.6), [1, 2])
d3 = pd.DataFrame(dict(A=.7, B=.8, D=.9), [1, 3])

如果我将它们连接在一起

pd.concat([d1, d2, d3], keys=['d1', 'd2', 'd3'])

我得到了预期的结果pandas.MultiIndex for my columns object:

        A    B    C    D
d1 2  0.1  0.2  0.3  NaN
   3  0.1  0.2  0.3  NaN
d2 1  NaN  0.4  0.5  0.6
   2  NaN  0.4  0.5  0.6
d3 1  0.7  0.8  NaN  0.9
   3  0.7  0.8  NaN  0.9

但是,我想使用levels论证文档 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html#pandas-concat:

levels:序列列表,默认无。 用于构造多重索引的特定级别(唯一值)。否则,将从键中推断出它们。

所以我通过了

pd.concat([d1, d2, d3], keys=['d1', 'd2', 'd3'], levels=[['d1', 'd2']])

并得到一个KeyError

ValueError: Key d3 not in level Index(['d1', 'd2'], dtype='object')

这是有道理的。我通过的级别不足以描述按键所指示的必要级别。如果我没有通过任何测试,就像我上面所做的那样,则会推断出级别(如文档中所述)。但我还能怎样利用这个论点来达到更好的效果呢?

如果我尝试这样做:

pd.concat([d1, d2, d3], keys=['d1', 'd2', 'd3'], levels=[['d1', 'd2', 'd3']])

我得到了与上面相同的结果。但是当我在关卡中再添加一个值时,

df = pd.concat([d1, d2, d3], keys=['d1', 'd2', 'd3'], levels=[['d1', 'd2', 'd3', 'd4']])

我最终得到了相同的数据框,但结果MultiIndex有未使用的级别。

df.index.levels[0]

Index(['d1', 'd2', 'd3', 'd4'], dtype='object')

那么这有什么意义呢?level争论,我应该使用keys不同吗?

我正在使用 Python 3.6 和 Pandas 0.22。


在为自己回答这个问题的过程中,我学到了很多东西,我想整理一个例子和一些解释的目录。

针对题主的具体回答levels争论将接近尾声。

pandas.concat: 丢失的手册

链接到当前文档 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html#pandas-concat

导入和定义对象

import pandas as pd

d1 = pd.DataFrame(dict(A=.1, B=.2, C=.3), index=[2, 3])
d2 = pd.DataFrame(dict(B=.4, C=.5, D=.6), index=[1, 2])
d3 = pd.DataFrame(dict(A=.7, B=.8, D=.9), index=[1, 3])

s1 = pd.Series([1, 2], index=[2, 3])
s2 = pd.Series([3, 4], index=[1, 2])
s3 = pd.Series([5, 6], index=[1, 3])

论点

objs

我们遇到的第一个论点是objs:

objs:Series、DataFrame 或 Panel 对象的序列或映射 如果传递一个字典,则排序后的键将用作键参数,除非传递它,在这种情况下将选择值(见下文)。任何 None 对象都将被静默删除,除非它们都是 None 在这种情况下将引发 ValueError

  • 我们通常会看到它与列表一起使用Series or DataFrame对象。
  • 我会证明这一点dict也可能非常有用。
  • 也可以使用生成器,并且在使用时非常有用map as in map(f, list_of_df)

现在,我们将坚持列出一些DataFrame and Series上面定义的对象。 我将展示如何利用词典来提供非常有用的信息MultiIndex稍后有结果。

pd.concat([d1, d2])

     A    B    C    D
2  0.1  0.2  0.3  NaN
3  0.1  0.2  0.3  NaN
1  NaN  0.4  0.5  0.6
2  NaN  0.4  0.5  0.6

axis

我们遇到的第二个论点是axis其默认值为0:

axis: {0/'索引',1/'列'},默认0 沿其连接的轴。

Two DataFrames with axis=0(堆叠)

对于值0 or index我们的意思是:“沿列对齐并添加到索引”。

如上所示,我们使用的地方axis=0, 因为0是默认值,我们看到索引d2扩展索引d1尽管存在价值重叠2:

pd.concat([d1, d2], axis=0)

     A    B    C    D
2  0.1  0.2  0.3  NaN
3  0.1  0.2  0.3  NaN
1  NaN  0.4  0.5  0.6
2  NaN  0.4  0.5  0.6

Two DataFrames with axis=1(并排)

对于价值观1 or columns我们的意思是:“沿着索引对齐并添加到列”,

pd.concat([d1, d2], axis=1)

     A    B    C    B    C    D
1  NaN  NaN  NaN  0.4  0.5  0.6
2  0.1  0.2  0.3  0.4  0.5  0.6
3  0.1  0.2  0.3  NaN  NaN  NaN

我们可以看到,结果索引是索引的并集,结果列是列的扩展d1的列d2.

两个(或三个)Series with axis=0(堆叠)

组合时pandas.Series along axis=0,我们得到一个pandas.Series。结果的名称SeriesNone除非全部Series合并后具有相同的名称。注意'Name: A'当我们打印出结果时Series。当它不存在时,我们可以假设Series名字是None.

               |                       |                        |  pd.concat(
               |  pd.concat(           |  pd.concat(            |      [s1.rename('A'),
 pd.concat(    |      [s1.rename('A'), |      [s1.rename('A'),  |       s2.rename('B'),
     [s1, s2]) |       s2])            |       s2.rename('A')]) |       s3.rename('A')])
-------------- | --------------------- | ---------------------- | ----------------------
2    1         | 2    1                | 2    1                 | 2    1
3    2         | 3    2                | 3    2                 | 3    2
1    3         | 1    3                | 1    3                 | 1    3
2    4         | 2    4                | 2    4                 | 2    4
dtype: int64   | dtype: int64          | Name: A, dtype: int64  | 1    5
               |                       |                        | 3    6
               |                       |                        | dtype: int64

两个(或三个)Series with axis=1(并排)

组合时pandas.Series along axis=1, 它是name我们引用的属性是为了推断结果中的列名pandas.DataFrame.

                       |                       |  pd.concat(
                       |  pd.concat(           |      [s1.rename('X'),
 pd.concat(            |      [s1.rename('X'), |       s2.rename('Y'),
     [s1, s2], axis=1) |       s2], axis=1)    |       s3.rename('Z')], axis=1)
---------------------- | --------------------- | ------------------------------
     0    1            |      X    0           |      X    Y    Z
1  NaN  3.0            | 1  NaN  3.0           | 1  NaN  3.0  5.0
2  1.0  4.0            | 2  1.0  4.0           | 2  1.0  4.0  NaN
3  2.0  NaN            | 3  2.0  NaN           | 3  2.0  NaN  6.0

Mixed Series and DataFrame with axis=0(堆叠)

当执行串联时Series and DataFrame along axis=0,我们将所有的Series到单列DataFrames.

请特别注意,这是一个串联axis=0;这意味着在对齐列的同时扩展索引(行)。在下面的示例中,我们看到索引变为[2, 3, 2, 3]这是不加区别地附加索引。除非我强制命名,否则这些列不会重叠Series参数为的列to_frame:

 pd.concat(               |
     [s1.to_frame(), d1]) |  pd.concat([s1, d1])
------------------------- | ---------------------
     0    A    B    C     |      0    A    B    C
2  1.0  NaN  NaN  NaN     | 2  1.0  NaN  NaN  NaN
3  2.0  NaN  NaN  NaN     | 3  2.0  NaN  NaN  NaN
2  NaN  0.1  0.2  0.3     | 2  NaN  0.1  0.2  0.3
3  NaN  0.1  0.2  0.3     | 3  NaN  0.1  0.2  0.3

你可以看到结果pd.concat([s1, d1])就像我执行了一样to_frame myself.

但是,我可以使用参数来控制结果列的名称to_frame。重命名Seriesrename方法确实not控制结果中的列名称DataFrame.

 # Effectively renames       |                            |
 # `s1` but does not align   |  # Does not rename.  So    |  # Renames to something
 # with columns in `d1`      |  # Pandas defaults to `0`  |  # that does align with `d1`
 pd.concat(                  |  pd.concat(                |  pd.concat(
     [s1.to_frame('X'), d1]) |      [s1.rename('X'), d1]) |      [s1.to_frame('B'), d1])
---------------------------- | -------------------------- | ----------------------------
     A    B    C    X        |      0    A    B    C      |      A    B    C
2  NaN  NaN  NaN  1.0        | 2  1.0  NaN  NaN  NaN      | 2  NaN  1.0  NaN
3  NaN  NaN  NaN  2.0        | 3  2.0  NaN  NaN  NaN      | 3  NaN  2.0  NaN
2  0.1  0.2  0.3  NaN        | 2  NaN  0.1  0.2  0.3      | 2  0.1  0.2  0.3
3  0.1  0.2  0.3  NaN        | 3  NaN  0.1  0.2  0.3      | 3  0.1  0.2  0.3

Mixed Series and DataFrame with axis=1(并排)

这是相当直观的。Series列名默认为此类的枚举Series物体当name属性不可用。

                    |  pd.concat(
 pd.concat(         |      [s1.rename('X'),
     [s1, d1],      |       s2, s3, d1],
     axis=1)        |      axis=1)
------------------- | -------------------------------
   0    A    B    C |      X    0    1    A    B    C
2  1  0.1  0.2  0.3 | 1  NaN  3.0  5.0  NaN  NaN  NaN
3  2  0.1  0.2  0.3 | 2  1.0  4.0  NaN  0.1  0.2  0.3
                    | 3  2.0  NaN  6.0  0.1  0.2  0.3

join

第三个参数是join描述生成的合并应该是外部合并(默认)还是内部合并。

join: {'inner', 'outer'}, 默认'outer'
如何处理其他轴上的索引。

事实证明,没有left or right选项为pd.concat可以处理多个要合并的对象。

如果是d1 and d2,选项如下所示:

outer

pd.concat([d1, d2], axis=1, join='outer')

     A    B    C    B    C    D
1  NaN  NaN  NaN  0.4  0.5  0.6
2  0.1  0.2  0.3  0.4  0.5  0.6
3  0.1  0.2  0.3  NaN  NaN  NaN

inner

pd.concat([d1, d2], axis=1, join='inner')

     A    B    C    B    C    D
2  0.1  0.2  0.3  0.4  0.5  0.6

join_axes

第四个参数是让我们能够做我们的事情left合并等等。

连接轴:索引对象列表
用于其他 n - 1 个轴的特定索引,而不是执行内部/外部设置逻辑。

左合并

pd.concat([d1, d2, d3], axis=1, join_axes=[d1.index])

     A    B    C    B    C    D    A    B    D
2  0.1  0.2  0.3  0.4  0.5  0.6  NaN  NaN  NaN
3  0.1  0.2  0.3  NaN  NaN  NaN  0.7  0.8  0.9

右合并

pd.concat([d1, d2, d3], axis=1, join_axes=[d3.index])

     A    B    C    B    C    D    A    B    D
1  NaN  NaN  NaN  0.4  0.5  0.6  0.7  0.8  0.9
3  0.1  0.2  0.3  NaN  NaN  NaN  0.7  0.8  0.9

ignore_index

忽略索引: 布尔值,默认 False
如果为 True,则不使用串联轴上的索引值。生成的轴将标记为 0, ..., n - 1。如果您要连接对象,而连接轴没有有意义的索引信息,则这非常有用。请注意,连接中仍然遵循其他轴上的索引值。

就像我堆叠时一样d1在之上d2,如果我不关心索引值,我可以重置它们或忽略它们。

                      |  pd.concat(             |  pd.concat(
                      |      [d1, d2],          |      [d1, d2]
 pd.concat([d1, d2])  |      ignore_index=True) |  ).reset_index(drop=True)
--------------------- | ----------------------- | -------------------------
     A    B    C    D |      A    B    C    D   |      A    B    C    D
2  0.1  0.2  0.3  NaN | 0  0.1  0.2  0.3  NaN   | 0  0.1  0.2  0.3  NaN
3  0.1  0.2  0.3  NaN | 1  0.1  0.2  0.3  NaN   | 1  0.1  0.2  0.3  NaN
1  NaN  0.4  0.5  0.6 | 2  NaN  0.4  0.5  0.6   | 2  NaN  0.4  0.5  0.6
2  NaN  0.4  0.5  0.6 | 3  NaN  0.4  0.5  0.6   | 3  NaN  0.4  0.5  0.6

并且使用时axis=1:

                                   |     pd.concat(
                                   |         [d1, d2], axis=1,
 pd.concat([d1, d2], axis=1)       |         ignore_index=True)
-------------------------------    |    -------------------------------
     A    B    C    B    C    D    |         0    1    2    3    4    5
1  NaN  NaN  NaN  0.4  0.5  0.6    |    1  NaN  NaN  NaN  0.4  0.5  0.6
2  0.1  0.2  0.3  0.4  0.5  0.6    |    2  0.1  0.2  0.3  0.4  0.5  0.6
3  0.1  0.2  0.3  NaN  NaN  NaN    |    3  0.1  0.2  0.3  NaN  NaN  NaN

keys

我们可以传递标量值或元组的列表,以便将元组或标量值分配给相应的 MultiIndex。传递的列表的长度必须与连接的项目数相同。

keys:顺序,默认 None
如果通过了多个级别,则应包含元组。使用传递的键作为最外层构建分层索引

axis=0

连接时Series沿途物体axis=0(扩展索引)。

这些钥匙,成为一个新的初始级别MultiIndex索引属性中的对象。

 #           length 3             length 3           #         length 2        length 2
 #          /--------\         /-----------\         #          /----\         /------\
 pd.concat([s1, s2, s3], keys=['A', 'B', 'C'])       pd.concat([s1, s2], keys=['A', 'B'])
----------------------------------------------      -------------------------------------
A  2    1                                           A  2    1
   3    2                                              3    2
B  1    3                                           B  1    3
   2    4                                              2    4
C  1    5                                           dtype: int64
   3    6
dtype: int64

但是,我们可以在中使用多个标量值keys论证以创造更深入的MultiIndex。这里我们通过tuples长度为 2 的前面添加两个新的级别 aMultiIndex:

 pd.concat(
     [s1, s2, s3],
     keys=[('A', 'X'), ('A', 'Y'), ('B', 'X')])
-----------------------------------------------
A  X  2    1
      3    2
   Y  1    3
      2    4
B  X  1    5
      3    6
dtype: int64

axis=1

沿着列延伸时有点不同。当我们使用axis=0(见上文)我们的keys充当MultiIndex除现有指数外的其他水平。为了axis=1,我们指的是一个轴Series对象不具有,即columns属性。

Variations of Two Series wtih axis=1

请注意,命名s1 and s2只要不重要keys已通过,但如果keys都通过了。

               |                       |                        |  pd.concat(
               |  pd.concat(           |  pd.concat(            |      [s1.rename('U'),
 pd.concat(    |      [s1, s2],        |      [s1.rename('U'),  |       s2.rename('V')],
     [s1, s2], |      axis=1,          |       s2.rename('V')], |       axis=1,
     axis=1)   |      keys=['X', 'Y']) |       axis=1)          |       keys=['X', 'Y'])
-------------- | --------------------- | ---------------------- | ----------------------
     0    1    |      X    Y           |      U    V            |      X    Y
1  NaN  3.0    | 1  NaN  3.0           | 1  NaN  3.0            | 1  NaN  3.0
2  1.0  4.0    | 2  1.0  4.0           | 2  1.0  4.0            | 2  1.0  4.0
3  2.0  NaN    | 3  2.0  NaN           | 3  2.0  NaN            | 3  2.0  NaN
MultiIndex with Series and axis=1
 pd.concat(
     [s1, s2],
     axis=1,
     keys=[('W', 'X'), ('W', 'Y')])
-----------------------------------
     W
     X    Y
1  NaN  3.0
2  1.0  4.0
3  2.0  NaN
Two DataFrame with axis=1

axis=0例子,keys添加级别到MultiIndex,但是这次对象存储在columns属性。

 pd.concat(                     |  pd.concat(
     [d1, d2],                  |      [d1, d2],
     axis=1,                    |      axis=1,
     keys=['X', 'Y'])           |      keys=[('First', 'X'), ('Second', 'X')])
------------------------------- | --------------------------------------------
     X              Y           |   First           Second
     A    B    C    B    C    D |       X                X
1  NaN  NaN  NaN  0.4  0.5  0.6 |       A    B    C      B    C    D
2  0.1  0.2  0.3  0.4  0.5  0.6 | 1   NaN  NaN  NaN    0.4  0.5  0.6
3  0.1  0.2  0.3  NaN  NaN  NaN | 2   0.1  0.2  0.3    0.4  0.5  0.6
                                | 3   0.1  0.2  0.3    NaN  NaN  NaN
Series and DataFrame with axis=1

这很棘手。在这种情况下,标量键值不能充当索引的唯一级别Series对象,当它成为一个列,同时也充当一个对象的第一层MultiIndex为了DataFrame。所以 Pandas 将再次使用name的属性Series对象作为列名称的来源。

 pd.concat(           |  pd.concat(
     [s1, d1],        |      [s1.rename('Z'), d1],
     axis=1,          |      axis=1,
     keys=['X', 'Y']) |      keys=['X', 'Y'])
--------------------- | --------------------------
   X    Y             |    X    Y
   0    A    B    C   |    Z    A    B    C
2  1  0.1  0.2  0.3   | 2  1  0.1  0.2  0.3
3  2  0.1  0.2  0.3   | 3  2  0.1  0.2  0.3
Limitations of keys and MultiIndex inferrence.

Pandas 似乎只能从中推断出列名Series名称,但在具有不同列级别数的数据帧之间进行类似串联时,它不会填充空白。

d1_ = pd.concat(
    [d1], axis=1,
    keys=['One'])
d1_

   One
     A    B    C
2  0.1  0.2  0.3
3  0.1  0.2  0.3

然后将其与列对象中只有一个级别的另一个数据框连接起来,Pandas 将拒绝尝试创建元组MultiIndex对象并组合所有数据帧,就像单个级别的对象、标量和元组一样。

pd.concat([d1_, d2], axis=1)

   (One, A)  (One, B)  (One, C)    B    C    D
1       NaN       NaN       NaN  0.4  0.5  0.6
2       0.1       0.2       0.3  0.4  0.5  0.6
3       0.1       0.2       0.3  NaN  NaN  NaN

通过一个dict代替list

递字典的时候,pandas.concat将使用字典中的键作为keys范围。

 # axis=0               |  # axis=1
 pd.concat(             |  pd.concat(
     {0: d1, 1: d2})    |      {0: d1, 1: d2}, axis=1)
----------------------- | -------------------------------
       A    B    C    D |      0              1
0 2  0.1  0.2  0.3  NaN |      A    B    C    B    C    D
  3  0.1  0.2  0.3  NaN | 1  NaN  NaN  NaN  0.4  0.5  0.6
1 1  NaN  0.4  0.5  0.6 | 2  0.1  0.2  0.3  0.4  0.5  0.6
  2  NaN  0.4  0.5  0.6 | 3  0.1  0.2  0.3  NaN  NaN  NaN

levels

这与keys争论.当levels保留为其默认值None,Pandas 将采用结果的每个级别的唯一值MultiIndex并将其用作结果中使用的对象index.levels属性。

levels:序列列表,默认 None
用于构造多重索引的特定级别(唯一值)。否则,将从密钥中推断出它们。

如果 Pandas 已经推断出这些级别应该是什么,那么我们自己指定它有什么好处呢?我将展示一个示例,然后让您思考为什么这可能有用的其他原因。

Example

根据文档,levels参数是序列列表。这意味着我们可以使用另一个pandas.Index作为这些序列之一。

考虑数据框df这是串联的d1, d2 and d3:

df = pd.concat(
    [d1, d2, d3], axis=1,
    keys=['First', 'Second', 'Fourth'])

df

  First           Second           Fourth
      A    B    C      B    C    D      A    B    D
1   NaN  NaN  NaN    0.4  0.5  0.6    0.7  0.8  0.9
2   0.1  0.2  0.3    0.4  0.5  0.6    NaN  NaN  NaN
3   0.1  0.2  0.3    NaN  NaN  NaN    0.7  0.8  0.9

列对象的级别为:

print(df, *df.columns.levels, sep='\n')

Index(['First', 'Second', 'Fourth'], dtype='object')
Index(['A', 'B', 'C', 'D'], dtype='object')

如果我们使用sum在一个groupby we get:

df.groupby(axis=1, level=0).sum()

   First  Fourth  Second
1    0.0     2.4     1.5
2    0.6     0.0     1.5
3    0.6     2.4     0.0

但如果不是['First', 'Second', 'Fourth']还有另一个缺失的类别名为Third and Fifth?我希望它们包含在结果中groupby聚合?如果我们有一个pandas.CategoricalIndex。我们可以提前指定levels争论。

因此,我们来定义df as:

cats = ['First', 'Second', 'Third', 'Fourth', 'Fifth']
lvl = pd.CategoricalIndex(cats, categories=cats, ordered=True)

df = pd.concat(
    [d1, d2, d3], axis=1,
    keys=['First', 'Second', 'Fourth'],
    levels=[lvl]
)

df

   First  Fourth  Second
1    0.0     2.4     1.5
2    0.6     0.0     1.5
3    0.6     2.4     0.0

但列对象的第一级是:

df.columns.levels[0]

CategoricalIndex(
    ['First', 'Second', 'Third', 'Fourth', 'Fifth'],
    categories=['First', 'Second', 'Third', 'Fourth', 'Fifth'],
    ordered=True, dtype='category')

And our groupby总结如下:

df.groupby(axis=1, level=0).sum()

   First  Second  Third  Fourth  Fifth
1    0.0     1.5    0.0     2.4    0.0
2    0.6     1.5    0.0     0.0    0.0
3    0.6     0.0    0.0     2.4    0.0

names

这用于命名结果的级别MultiIndex。的长度names列表应与结果中的级别数匹配MultiIndex.

names:列表,默认无
生成的分层索引中级别的名称

 # axis=0                     |  # axis=1
 pd.concat(                   |  pd.concat(
     [d1, d2],                |      [d1, d2],
     keys=[0, 1],             |      axis=1, keys=[0, 1],
     names=['lvl0', 'lvl1'])  |      names=['lvl0', 'lvl1'])
----------------------------- | ----------------------------------
             A    B    C    D | lvl0    0              1
lvl0 lvl1                     | lvl1    A    B    C    B    C    D
0    2     0.1  0.2  0.3  NaN | 1     NaN  NaN  NaN  0.4  0.5  0.6
     3     0.1  0.2  0.3  NaN | 2     0.1  0.2  0.3  0.4  0.5  0.6
1    1     NaN  0.4  0.5  0.6 | 3     0.1  0.2  0.3  NaN  NaN  NaN
     2     NaN  0.4  0.5  0.6 |

verify_integrity

不言自明的文档

验证完整性: 布尔值,默认 False
检查新的串联轴是否包含重复项。相对于实际的数据串联,这可能非常昂贵。

因为连接产生的索引d1 and d2不是唯一的,它将无法通过完整性检查。

pd.concat([d1, d2])

     A    B    C    D
2  0.1  0.2  0.3  NaN
3  0.1  0.2  0.3  NaN
1  NaN  0.4  0.5  0.6
2  NaN  0.4  0.5  0.6

And

pd.concat([d1, d2], verify_integrity=True)

> ValueError:索引具有重叠值:[2]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 的 concat 函数中的“级别”、“键”和名称参数是什么? 的相关文章

随机推荐

  • 在 JavaScript 中,我如何使用数组来增加字符串以创建循环?

    我正在尝试制作一个网页 每次刷新时其壁纸都会发生变化 我希望它在每次刷新页面时显示数组中的下一个图像 因此 每次刷新都会遍历列表直至结束 然后重新开始 现在我正在使用一个数组并使用随机索引访问它 但我需要使用每次增加 1 的索引来访问它 一
  • iOS 8.4 CFNetwork SSL 握手失败 (-9850)

    自从我将 xcode 更新到 6 4 并将模拟器更新到 ios 8 4 后 我的 ssl 握手代码失败了 错误是 CFNetwork SSLHandshake 失败 9850 相同的代码在 ios 8 3 模拟器上成功执行 ssl 握手 我
  • 如何返回到控制台中行的开头?

    如何返回到行的开头并覆盖控制台上已输出的内容 以下似乎不起作用 System out print mystuff r 我怀疑您的光标正在移动到该行的前面 您已有的文本不会消失 因为您没有用任何内容覆盖它 您可以输出空格来空白该行 然后添加另
  • 无法读取 Web API 操作过滤器内容

    相关问题 Web API 操作参数间歇性为空 https stackoverflow com questions 18256817 web api action parameter is intermittently null and ht
  • GDB 报告 c++ 对象构造函数中参数的地址错误

    我遇到了 GDB 将字符串作为参数传递给构造函数的奇怪行为 代码工作正常 但是当我在调试器中单步执行时 GDB 似乎认为我的参数位于不同的地址 有谁知道这是怎么回事 这是我可以创建的最简单的程序来演示该问题 jwcacces neptune
  • Spring Boot 集成测试不读取属性文件

    我想创建集成测试 其中 Spring Boot 将使用从 properties 文件读取值 Value注解 但每次我运行测试时 我的断言都会失败 因为 Spring 无法读取该值 org junit ComparisonFailure Ex
  • 如何在 Outlook 签名中嵌入图像?

    是否可以为以下内容创建 HTML 电子邮件签名 2003年展望或上面不引用外部图像 也就是说 使用那些特殊的 cid 引用 但将图像本身嵌入到签名中 而不是嵌入到文件系统或网络中 这是一个 Web 应用程序 它根据用户的各种输入生成 标准
  • 使用 javascript 中的类加载 php 页面

    我在 javascript 中有弹出类 并在我的 html 页面中添加了显示该弹出窗口所需的所有脚本 我正在尝试在单击表单的提交按钮时在弹出窗口中加载 PHP 页面 弹出窗口对于如下按钮工作正常 来自 select php 的文本显示在弹出
  • 通过 Xcode 克隆特定的 git 分支

    我在从 Apple Xcode 克隆特定 git 分支时遇到困难 在 Xcode gt 源代码管理 gt 克隆并插入我的 HTTP 克隆 url 中 我只能克隆主分支 但我没有找到从 Xcode 克隆另一个开发人员分支的解决方案 通过使用终
  • 我可以读取文件并在编译时构造异构对象吗?

    情况 YAML 文件包含按名称排列的异构对象列表 如下所示 object Foo name Joe Bloggs age 26 object Bar location UK 对象不继承任何基类 也不共享彼此之间的任何类型的关系 除了它们看起
  • 将 javascript 和 css 内联放入一个缩小的 html 文件中以提高性能?

    一个典型的网站由一个index html 文件和一堆javascript 和css 文件组成 为了提高网站的性能 可以 缩小 javascript 和 css 文件 以减小文件大小 将 javascript 文件连接成一个文件 与 css
  • 当过滤器存在时使用数组设置范围值

    我想将某个范围的值获取到一个数组中 处理数组数据 然后将该数组中的值设置回它来自的范围 考虑到该范围可能包含一些隐藏行 让我们以两列的工作表为例 A B VALUE FILTER 1 P 2 N 3 N 4 P 5 P 然后应用自动过滤器并
  • 如何正确编写 int、double、float 等的数学扩展方法?

    我想编写一系列扩展方法来简化数学运算 例如 代替 Math Pow 2 5 我希望能够写 2 Power 5 在我看来 这更清楚 问题是 在编写扩展方法时如何处理不同的数字类型 我需要为每种类型编写一个扩展方法吗 public static
  • 如果满足条件,Reactor如何重复某个步骤n次

    请帮我处理反应堆 我需要检查一个条件最多n次并返回最终结果 我发现reactor有reactor extra模块 https projectreactor io docs extra snapshot api reactor retry R
  • 比较两个文本文件并将差异写入文本文件

    我想比较两个文本文件并将差异输出到另一个文本文件中 Location c temp z txt compare object get content c temp hostname old txt get content c temp ho
  • 这句话是什么意思

    unlike SwingUtilities invokeAndWait the event thread is permitted to call SwingUtilities invokeLater 我无法清楚地理解这一点 请帮助我 另一
  • Angular 6 router - 替换当前路由的一些参数

    在我的 Angular 6 解决方案中 网址具有以下结构 语言 app section object id view queryparams 语言选择器组件由应用程序的所有部分共享 并且包含在父路由之一的模板中 以便它出现在所有子路由中 当
  • 如何使用 xlwings 保存工作簿?

    我有一个 Excel 工作表 一些按钮和一些宏 我使用 xlwings 来使其工作 有没有办法通过 xlwings 保存工作簿 我想在执行操作后提取特定的工作表 但保存的工作表是操作前提取的工作表 没有生成的数据 我提取所需工作表的代码如下
  • PowerShell 帮助文件无法正确显示

    在 Windows 10 和 Windows Server 2012 上的 PowerShell 4 0 5 0 中进行了测试 clear help wmiobject or cls man job 清除屏幕后 帮助文件无法正确显示结果 重
  • Pandas 的 concat 函数中的“级别”、“键”和名称参数是什么?

    问题 我该如何使用pd concat 是什么levels论据 是什么keys论据 是否有很多示例可以帮助解释如何使用所有参数 Pandas concat函数是瑞士军刀 https en wikipedia org wiki Swiss Ar