0
点赞
收藏
分享

微信扫一扫

字符串元组保存表格分割列

import pandas as pd

# 创建原始的Series
data = pd.Series([
    "('1500331108-10', '23103093-1, 23103093-2, 23103095-1, 23103095-2', '22000')",
    "('1500304821-180', '23102612-1', '2000')"
])

# 定义一个函数,用于处理每行元素
def process_element(element):
    # 剔除"("和")"和"'"
    element = element.strip("()'")
    # 根据"', '"进行分列
    elements_list = element.split("', '")
    # 输出单行Series
    return pd.Series(elements_list, index=["订单号", "卷号", "重量"])

# 使用apply()函数应用处理函数到每行元素
processed_data = data.apply(process_element)

# 打印结果, 也是Series
processed_data

import pyperclip
# clipboard_data = pyperclip.paste()  # cyclone-arr-return str(tuple)  eval 不会将内部元素的引号也去除
tuple_data = list(eval(clipboard_data))  # 如果只有一行数据 tuple会降维, 需转为list
df = pd.DataFrame(tuple_data)  # 内部元素依然有引号 只不过没display而已
columns = ["调拨计划", "重量误差", "箱号"]
df.columns = columns
# df["调拨计划"].astype(str).str.split("'", expand=True)

# 剔除Series中每个元素的"(", ")"符号 然后根据"'"符号进行分列, 新的列名为["订单号", "卷号", "重量"]
# 方法1 "','" 或"', '"
pd.Series([
    "('1500331108-10', '23103093-1, 23103093-2, 23103095-1, 23103095-2', '22000')",
    "('1500304821-180', '23102612-1', '2000')"
]).str.strip("()' ").str.replace(" ", "").str.split("','", expand=True)

pd.Series([
    "('1500331108-10', '23103093-1, 23103093-2, 23103095-1, 23103095-2', '22000')",
    "('1500304821-180', '23102612-1', '2000')"
]).str.strip("()' ").str.split("', '", expand=True)

# 方法2 "'" 然后剔除元素全为","的列
df_test = pd.Series([
    "('1500331108-10', '23103093-1, 23103093-2, 23103095-1, 23103095-2', '22000')",
    "('1500304821-180', '23102612-1', '2000')"
]).str.strip("()' ").str.replace(" ", "").str.split("'", expand=True)

df_test.loc[:, ~df_test.apply(lambda x: (x == ',').all(), axis=0)]

df_test.loc[:, ~df_test.apply(lambda x: all(val == ',' for val in x))]

# 方法3 正则表达式剔除"() " re.sub(r'[()\s]', '', original_string)

# 方法4 见

# 从txt里断行

import pandas as pd
# df = pd.read_clipboard()
# list_columns = df.columns.tolist()

# ser = pd.Series(list_columns)
# list_split = ser.astype(str).str.split(',').tolist()
# pd.DataFrame(list_split)

# ser.astype(str).str.split(',', expand=True)

# pd.DataFrame(
#     i.split(',') for i in list_columns
# )

def fun_CanbeList(x):
    try:
        eval(i)
        return True
    except:
        return False

# list(
#     eval(k) for i in list_columns for j in i for k in j if fun_CanbeList(k)
# )

# pd.Series(list_columns).to_excel(r"d:\test\test.xlsx", index=False)

# list_columns

举报

相关推荐

0 条评论