Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用dataframe方法按名称列出的小写列_Python_Pandas - Fatal编程技术网

Python 使用dataframe方法按名称列出的小写列

Python 使用dataframe方法按名称列出的小写列,python,pandas,Python,Pandas,我有一个包含字符串和NaN的数据帧。我想按名称将某些列str.lower设置为_lower=['b','d','e']。理想情况下,我可以在整个数据帧上使用一个方法,而不是在df[to_lower]上使用一个方法。我有 df[to_lower]=df[to_lower].applylambda x:x.astypestr.str.lower 但是我想知道一种不用指定给所选列的方法 df = pd.DataFrame({'a': ['A', 'a'], 'b': ['B', 'b']}) to_

我有一个包含字符串和NaN的数据帧。我想按名称将某些列str.lower设置为_lower=['b','d','e']。理想情况下,我可以在整个数据帧上使用一个方法,而不是在df[to_lower]上使用一个方法。我有

df[to_lower]=df[to_lower].applylambda x:x.astypestr.str.lower

但是我想知道一种不用指定给所选列的方法

df = pd.DataFrame({'a': ['A', 'a'], 'b': ['B', 'b']})
to_lower = ['a']
df2 = df.copy()
df2[to_lower] = df2[to_lower].apply(lambda x: x.astype(str).str.lower())
你想要这个:

for column in to_lower:
    df[column] = df[column].str.lower()
假设您的行数多于列数,这将更加有效。

您可以使用assign方法并将结果解压缩为关键字参数:

df = pd.DataFrame({'a': ['A', 'a'], 'b': ['B', 'b'], 'c': ['C', 'c']})
to_lower = ['a', 'b']

df.assign(**df[to_lower].apply(lambda x: x.astype(str).str.lower()))

#   a   b   c
#0  a   b   C
#1  a   b   c

您的方法不会将结果分配给选定的列。它返回一个新的数据帧。如果要将它们分配给新列,df[new_columns]=df[to_lower].applylambda x:x.astypestr.str.lower?@Psidom是的,这就是我的意思,编辑过的问题如果不想更改to_lower列,只需将新列名作为新列提供。输入和输出数据示例?@Psidom我上面的代码符合我的要求,但是我想要一种在df上作为方法的方法,所以我不必指定df[lower],也不必避免覆盖那些列,但是因为我想把它作为方法链接在DF上而不是在它的子集上。这样做是否可能返回一个新的数据文件而不是对原变量进行变异?是否可以在不使用D赋值的DF名称的情况下这样做,这样我就可以在一系列方法中间进行?