python - 如何切割和 reshape /融化表格或 CSV 文件

标签 python string pandas csv numpy

我有一个 CSV 文件,其中包含每个变量的 minmax 值,如下所示:

original = """
min_a max_a min_b max_b
3 5 1 9
"""

第一行按变量名称排序,因此保证它从 min_amax_z。我想将它 reshape /融化成 block ,如下所示:

goal = """
 min max
a 3 5
b 1 9
"""

我怎样才能做到这一点?我感觉像pandas.melt或者可以在这里使用 numpy 方法,但不知道如何使用。我当前的“黑客”是按如下方式 reshape 第二行值,然后将结果复制粘贴或写入 CSV:

orig = "3 5 1 9"
temp = orig.split()
chopped = [" ".join(temp[i:i+2]+["\n"]) for i in range(0,3,2)]
# chopped: ['3', '5', '1', '9']
ready = [" min max \n"] + [" ".join(e) for e in zip(['a','b'],chopped)]
# ready: [' min max \n', 'a 3 5 \n', 'b 1 9 \n']
flipped = "".join(ready)
# flipped: ' min max \na 3 5 \nb 1 9 \n'
print(flipped)
# Result:
#  min max
# a 3 5 
# b 1 9 

有正确的方法吗?谢谢!

最佳答案

通过split创建MultiIndex,然后可以使用stack :

df.columns = df.columns.str.split('_', expand=True)
df = df.stack().reset_index(level=0, drop=True)
print (df)
   max  min
a    5    3
b    9    1

设置:

original = """
min_a max_a min_b max_b
3 5 1 9
"""
df = pd.read_csv(pd.compat.StringIO(original), sep="\s+")
print (df)
   min_a  max_a  min_b  max_b
0      3      5      1      9
1      4      6      2     10

关于python - 如何切割和 reshape /融化表格或 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49044235/

相关文章:

php - 是否存在将 Unicode 文本大写的可靠方法?

string - VBA for Excel 中的 Str 函数向字符串添加一个字符

python - 如何使用 Python 在一个命令中追加和设置值?

python - Pandas 计算时差

python - 在Python中使用twisted以异步模式发送数据

python - Django CharField主键不起作用,自动创建rowid主键

python - 使用 Tee-Object 将 python 脚本的结果输出到终端和文件

python - 无法在 python 中导入 Difflib。我该如何解决?

c - 如何从 char* 而不是地址获取字符串的值

python - 如何从 python 中的 .xls 文件中读取多个表?