将某些索引名称(字符串)复制到新数据框

时间:2019-02-18 20:20:06

标签: python pandas dataframe indexing

我希望从现有数据框的某些行创建一个新的数据框。索引是字符串名称(例如:043-095(L01))。我希望复制索引从043开始的所有行。

我尝试使用通配符调用行:

df_new = df_old.loc[df_old.index == '043*'] 

但是,这会弹出一个空的数据框,仅复制列名称。

然后,我尝试了一种效率较低的方法,即创建索引名称列表并通过循环迭代地调用它们。这也行不通:

list = list(df_old.index.get_values()) 
for i in list: 
    df_new = df_old.loc[df_old.index == i]

这将产生一个仅包含原始数据帧最后一列的数据帧。但是,这是一个标题为“ over”的索引,因此甚至不适合我要寻找的过滤条件。

这是初始数据框:

                1    2    3    4    5      ...                 36            37            38            39            40
product                                    ...                                                                           
043-096(L00)  0.0  0.0  0.0  0.0  0.0      ...       5.643140e+00  5.340900e+00  5.088400e+00  4.468070e+00  4.092830e+00
041-092(L01)  0.0  0.0  0.0  0.0  0.0      ...       2.312400e+01  2.292020e+01  2.166400e+01  2.062450e+01  1.961710e+01
043-093(L01)  0.0  0.0  0.0  0.0  0.0      ...       2.019000e-01  1.145850e+00  6.568850e+00  1.580680e+01  2.964780e+01
041-093(L00)  0.0  0.0  0.0  0.0  0.0      ...       3.929880e+01  3.760480e+01  3.625430e+01  3.542060e+01  3.510910e+01
041-093(L01)  0.0  0.0  0.0  0.0  0.0      ...       6.371910e+00  5.821850e+00  5.535770e+00  5.392260e+00  5.291000e+00
043-096(L01)  0.0  0.0  0.0  0.0  0.0      ...       1.750060e+00  1.715700e+00  1.681990e+00  1.358840e+00  1.296470e+00
042-093(L16)  0.0  0.0  0.0  0.0  0.0      ...       1.172700e+00  1.178630e+01  3.434970e+01  7.109020e+01  1.136440e+02
043-093(L00)  0.0  0.0  0.0  0.0  0.0      ...       8.628490e+00  3.177190e+01  7.529960e+01  1.314360e+02  1.981620e+02
041-095(L01)  0.0  0.0  0.0  0.0  0.0      ...       8.165380e-03  8.903470e-03  8.237130e-03  8.687170e-03  9.185370e-03
042-093(L00)  0.0  0.0  0.0  0.0  0.0      ...       1.346020e+01  2.028300e+01  2.922050e+01  3.994700e+01  5.241390e+01
043-095(L00)  0.0  0.0  0.0  0.0  0.0      ...       1.453260e+02  1.051780e+02  7.979190e+01  6.791930e+01  5.806560e+01
043-094(L01)  0.0  0.0  0.0  0.0  0.0      ...       2.359510e+01  2.092200e+01  1.799270e+01  1.547530e+01  1.292230e+01
041-092(L00)  0.0  0.0  0.0  0.0  0.0      ...       5.922860e+01  5.580080e+01  5.150720e+01  4.853910e+01  4.493510e+01
041-095(L00)  0.0  0.0  0.0  0.0  0.0      ...       1.530490e-01  1.583970e-01  1.407330e-01  1.371880e-01  1.355580e-01
041-091(L00)  0.0  0.0  0.0  0.0  0.0      ...       5.372560e+01  5.788070e+01  6.146730e+01  6.655750e+01  7.144250e+01
041-090(L02)  0.0  0.0  0.0  0.0  0.0      ...       0.000000e+00  5.594050e-05  8.369660e-04  2.903470e-03  1.917730e-02
041-090(L00)  0.0  0.0  0.0  0.0  0.0      ...       0.000000e+00  1.534300e-03  8.703700e-03  4.770440e-02  1.738080e-01
041-094(L01)  0.0  0.0  0.0  0.0  0.0      ...       1.385020e+00  1.635600e+00  1.817290e+00  2.056140e+00  2.293480e+00
043-094(L00)  0.0  0.0  0.0  0.0  0.0      ...       9.074630e+02  9.164940e+02  8.776860e+02  7.838060e+02  6.768200e+02
041-091(L01)  0.0  0.0  0.0  0.0  0.0      ...       1.810710e+01  2.097550e+01  2.283200e+01  2.553310e+01  2.845680e+01
039-089(L01)  0.0  0.0  0.0  0.0  0.0      ...       7.822260e-02  9.664860e-02  1.074630e-01  1.214690e-01  1.348120e-01
043-097(L01)  0.0  0.0  0.0  0.0  0.0      ...       1.754870e-07  7.402690e-08  5.900700e-08  1.725820e-08  1.416280e-08
041-094(L00)  0.0  0.0  0.0  0.0  0.0      ...       9.471510e-01  1.195480e+00  1.458680e+00  1.727560e+00  2.054990e+00
039-089(L00)  0.0  0.0  0.0  0.0  0.0      ...       1.983690e-02  2.039220e-02  2.140960e-02  2.252160e-02  2.330300e-02
043-095(L01)  0.0  0.0  0.0  0.0  0.0      ...       7.249500e+00  6.697730e+00  6.278970e+00  6.019280e+00  5.670850e+00
043-097(L00)  0.0  0.0  0.0  0.0  0.0      ...       6.121160e-06  1.084730e-06  6.949800e-07  1.232050e-07  1.013090e-07
sum           0.0  0.0  0.0  0.0  0.0      ...       1.316938e+03  1.325456e+03  1.336783e+03  1.343518e+03  1.362432e+03
over          NaN  NaN  NaN  NaN  NaN      ...       5.504817e-03  5.053151e-03  4.697077e-03  4.480238e-03  4.162301e-03

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我会尝试类似的方法来仅打印您插入的行。正如另一个注释者所添加的,您还可以使用startswith代替str.contains。更明确的方法是str.startswith方法。

import pandas as pd


df = pd.read_csv("testdata.txt", header=None)

print(df[df.index.str.contains("043-")]) # string contains version

print(df[df.index.str.startswith("043")]) # index starts with