Вывести значения одного столбца в столбец d / f на основе запятой - PullRequest
0 голосов
/ 10 ноября 2019

Я работаю с 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] == '':

1 Ответ

0 голосов
/ 10 ноября 2019

Вот пример использования 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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...