python - 基于逗号将单列的值打印到 d/f 列
问题描述
我正在处理一个 csv 文件,并且一列由逗号分隔的一个到多个整数值组成。首先,代码将能够根据逗号知道行中的最大值。之后,它将生成名称为 a/c 的列的最大值。最后,它将能够在新列中打印值。我正在处理大数据。
INPUT
col column-name vvs
x12 2,3,4 ab
d3 4 fd
3fd 2,5,8,6 cf
5r4 3,2 mg
以下是我尝试编写的代码
a=read_file("xyz.csv") #READ FILE IS A FUNCTION AND IT WORKS PROPERLY
print(a["column-name"].max())
def dfmax(dfcl):
cl=0
t=[]
for i in range(dfcl.size):
b=dfcl[i]
c=b.split(",")
if len(c) > cl :
cl=len(c)
t=b
print(cl)
print(t)
return cl
c=dfmax(a["column-name"])
print(c)
for i in range(c):
a.insert(5+i,"A"+str(i+1),a["column-name"],True) #CODE IS WORKING FINE TILL HERE IT IS PRINTING MAXIMUM LENGTH
#I assume just to check the code that the maximum values in the column 5
c=5
#for i in range(a["column-name"].size):
for i in range(20):
b=a["column-name"][i]
cb=b.split(",")
for j in range(c):
if j < len(cb):
st = "A"+str(j+1)
#print(st)
a[st][i]=cb[j]
else:
a[st][i]=""
DESIRED OUTPUT
col column-name column-name-2 column-name-3 column-name-4 vvs
x12 2 3 4 ab
d3 4 fd
3fd 2 5 8 6 cf
5r4 3 2 mg
不幸的是,代码无法正常工作。它提供以下错误。如果有更简单的方法来完成这项任务,请告诉我。
C:\Users\abc\Anaconda3\lib\site-packages\ipykernel_launcher.py:10: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
# Remove the CWD from sys.path while we load stuff.
C:\Users\abc\Anaconda3\lib\site-packages\ipykernel_launcher.py:12: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
if sys.path[0] == '':
解决方案
这是使用 pandas 从 .csv 加载数据并创建所需输出的示例。我使用 np.nan 用“空”数据填充空白点。
import pandas as pd
import numpy as np
df = pd.read_csv(r"<PATH TO YOUR CSV>")
for row, item in enumerate(df["column-name"]):
l = item.split(",")
for idx, elem in enumerate(l):
col = "column-name-%s" % idx
if col not in df.columns:
df[col] = np.nan
df[col][row] = elem
df = df.drop(columns=["column-name"])
print(df)
在这里,我们首先检查数据框中的所有行,以获取“列名”列以获取逗号分隔值和行号。之后,我们将其拆分以获取该单元格中所有数字的列表。
现在我们检查我们的列表并记住数字在哪个位置(idx),所以我们知道它属于哪一列。现在我们知道了该列,我们检查它是否已经存在。如果存在,我们只需将我们的值添加到相应的行。否则,我们创建一个新列并首先用空数据填充它。
这给了我们以下输出:
col vvs column-name-0 column-name-1 column-name-2 column-name-3
0 x12 ab 2.0 3.0 4.0 NaN
1 d3 fd 4.0 NaN NaN NaN
2 3fd cf 2.0 5.0 8.0 6.0
3 5r4 mg 3.0 2.0 NaN NaN
希望能帮助到你。
推荐阅读
- ffmpeg - 如何使 mpv 与 mininterpolate 等 ffmpeg 过滤器更兼容?
- jquery - 更改所有href,使其原生网址显示在网站上
- python - Python 以太坊区块链交易
- python-3.x - 从 json 文件 python 中读取 (x,y) 值对
- javascript - 如何修复“对象可能未定义”?
- django - Django Allauth,推特范围
- vue.js - 入口点大小限制:代码拆分以限制 vue cli 3.x 中入口点的大小
- javascript - 当其中一个提取失败时,所有提取都不会显示
- google-ads-api - 如何通过脚本从 adword 活动中排除多个邮政编码?
- powershell - 如果字符串放置在一个序列中而不是不同的序列中,为什么使用 powershell 4.0 在文本文件中搜索字符串会被忽略?