我希望从现有数据框的某些行创建一个新的数据框。索引是字符串名称(例如: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
任何帮助将不胜感激。
答案 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