Python 在一个位置将列插入dataframe会更改所有列,甚至insert都不正确

Python 在一个位置将列插入dataframe会更改所有列,甚至insert都不正确,python,list,pandas,function,dataframe,Python,List,Pandas,Function,Dataframe,我有一个函数,它接受如下列表: list1 = [A1, A2, A3, A4, A5, A7, A8] 并查找缺少的字符并将其重新应用到列表中。然后,它获取该列表并将其插入到数据帧中 我将其分为3个函数:remove_chars从列表中删除字符(假设每个条目的数字前面有n个字符)missing_elements查找列表中缺少的任何数字,并生成这些数字的新列表(在上面的list1的情况下,missing_elements将返回[6],因为这是列表中缺少的数字);最后,insert_into_d

我有一个函数,它接受如下列表:

list1 = [A1, A2, A3, A4, A5, A7, A8]
并查找缺少的字符并将其重新应用到列表中。然后,它获取该列表并将其插入到数据帧中

我将其分为3个函数:
remove_chars
从列表中删除字符(假设每个条目的数字前面有n个字符)
missing_elements
查找列表中缺少的任何数字,并生成这些数字的新列表(在上面的
list1
的情况下,
missing_elements
将返回
[6]
,因为这是列表中缺少的数字);最后,
insert_into_df
使用
missing_elements
的输出将丢失的数字粘贴到数据框中它们应该在的位置(数据框有一组列,这些列被标记为
list1
,它可能有丢失的列)。下面是它的外观:

# Function to remove strings from questions
# Input list of strings and ints and outputs list with only ints
def remove_chars(L1):

    if len(L1) > 0:
        for i, j in enumerate(L1):
            L1[i] = re.sub('[^0-9]','', j)
            L1[i] = int(L1[i])
        return L1
    else:
        return

# Function to pick out missing numbers in lists
# This is used to ensure that each column list contains no deleted columns
def missing_elements(L1, start = None, end = None):

    if end is None and start is None:
        if len(L1) > 0:
            newlist1 = remove_chars(L1)
            start = 0
            end = len(newlist1) - 1
        else:
            return

    start, end = newlist1[0], newlist1[-1]
    return sorted(set(range(start, end + 1)).difference(newlist1))

# Function to insert missing sequential columns into dataframe
def insert_into_df(L, df):

    """
    insert_into_df: Inserts columns missing from dataframes into dataframe at the 
    proper index so that the inserted columns are in the correct order. This
    function is only to be used for dataframes containing sequential columns.
    ----
    Parameters:
        L: The list of column names that may contain a missing column
        df: The dataframe into which these columns will be inserted
    """

    tempList = list(L)

    if len(L) > 0:
        stringL0 = str(re.sub(r'\d+', '', tempList[0]))
        mList1 = missing_elements(L)

        if len(mList1) > 0:
            for i in range(len(mList1)):
                df.insert(loc = mList1[i], column = stringL0 + str(mList1[i]), value = 0)
        else:
            return df

        return df

    else: 
        return df
当我放入print语句时,它似乎输出了正确的数据帧,但在将其导出为csv时,它似乎已将
remove\u chars
函数应用于每个列标题,并仅按顺序输出一组数字


有人能告诉我为什么会发生这种情况以及该怎么做吗?如果您需要更多说明,请告诉我。

因为
L1
L2
是同一个列表,
L
。对其中任何名称所做的任何操作都会更改所有名称的基础列表。查看可能重复的问题,将问题固定为不重复,并尝试实际解决我遇到的问题。此问题将受益于您获得的输入/输出与您期望的结果的示例。此外,在未来的情况下,如果你有新问题,最好是打开一个新问题,而不是编辑旧问题,如果没有其他原因,就是它不会出现在新问题提要上,因此回答的可能性要小得多。