Вопрос или проблема
Я работаю с набором данных материаловедения и нахожусь в следующей ситуации,
У меня есть данные, организованные следующим образом:
Chemical_ Formula Property_name Property_Scalar
He Electrical conduc. 1
NO_2 Resistance 50
CuO3 Hardness
... ... ...
CuO3 Fluorescence 300
He Toxicity 39
NO2 Hardness 80
... ... ...
Как вы можете понять, это действительно беспорядок, потому что одна и та же химическая формула появляется более одного раза во всем наборе данных, но относится к разным рассматриваемым свойствам. Мой вопрос, как я могу легко, возможно, разбить набор данных на более мелкие, соответствуя каждой формуле с ее дескрипторами в ПОРЯДКЕ? Мне действительно нужна помощь с этим… спасибо. (Я использовал вымышленные имена и значения, просто чтобы объяснить свою проблему.)
Я работаю в Jupyter Notebook и использую Pandas.
Я редактирую свой вопрос, пытаясь быть более понятным:
Моя цель – построить несколько гистограмм с (например) n° материалов против проводимости при различных температурах (100K, 200K, 300K). Поэтому мне необходимо иметь как проводимость, так и температуру для каждого материала для четкого сравнения. Например, я думаю, что более удобным было бы получить:
Chemical formula Conductivity Temperature
He 5 10K
NO_2 7 59K
CuO_3 10 300K
... ... ...
He 14 100K
NO_2 5 70K
... ... ...
Учитывая, что ваш DataFrame:
df2 = pd.DataFrame({
"Chemical_Formula":["He", "NO_2", "CuO3", "CuO3", "He", "NO2"],
"Property_name":["Electrical conduc.", "Resistance", "Hardness", "Fluorescence", "Toxicity", "Hardness"],
"Property_Scalar":[1, 50, 10, 300, 39, 80]
})
Chemical_Formula | Property_name | Property_Scalar | |
---|---|---|---|
0 | He | Electrical conduc. | 1 |
1 | NO_2 | Resistance | 50 |
2 | CuO3 | Hardness | 10 |
3 | CuO3 | Fluorescence | 300 |
4 | He | Toxicity | 39 |
5 | NO2 | Hardness | 80 |
Вы можете использовать pivot для “размораживания” этого в широком формате
df3 = df2.pivot(index="Chemical_Formula", columns="Property_name")
Chemical_Formula | (‘Property_Scalar’, ‘Electrical conduc.’) | (‘Property_Scalar’, ‘Fluorescence’) | (‘Property_Scalar’, ‘Hardness’) | (‘Property_Scalar’, ‘Resistance’) | (‘Property_Scalar’, ‘Toxicity’) |
---|---|---|---|---|---|
CuO3 | nan | 300 | 10 | nan | nan |
He | 1 | nan | nan | nan | 39 |
NO2 | nan | nan | 80 | nan | nan |
NO_2 | nan | nan | nan | 50 | nan |
После этого вы можете отбросить столбцы, которые вам не нужны, и построить их.
.
Ответ или решение
Как упорядочить набор данных по материаловедению? Подробное руководство для специалистов
Вы описали ситуацию, в которой вам необходимо работать с неструктурированным набором данных в области материаловедения. Этот набор данных содержит информацию о различных химических формулах и их свойствах, представленную в формате:
Chemical_ Formula Property_name Property_Scalar
He Electrical conduc. 1
NO_2 Resistance 50
CuO3 Hardness
... ... ...
CuO3 Fluorescence 300
He Toxicity 39
NO2 Hardness 80
... ... ...
Проблема
Ваша основная проблема заключается в неконсолидированном виде данных, где одна и та же химическая формула может встречаться несколько раз, но с различными свойствами. Вам необходимо структурировать данные таким образом, чтобы можно было легко их анализировать и использовать для различных нужд, например, построения гистограмм.
Решение с использованием Pandas
Для решения данной задачи в Python в среде Jupyter Notebook и с использованием библиотеки Pandas можно применить метод pivot
, чтобы преобразовать таблицу в широкий формат. Это позволит вам организовать данные, сгруппировав их по химическим формулам и предусмотрев отдельные столбцы для каждого свойства.
Шаги выполнения
-
Изучение исходных данных:
Начнем с создания DataFrame на основе представленного вами набора данных.import pandas as pd df2 = pd.DataFrame({ "Chemical_Formula": ["He", "NO_2", "CuO3", "CuO3", "He", "NO2"], "Property_name": ["Electrical conduc.", "Resistance", "Hardness", "Fluorescence", "Toxicity", "Hardness"], "Property_Scalar": [1, 50, 10, 300, 39, 80] })
-
Преобразование данных:
Применим методpivot
для реорганизации таблицы в широкий формат:df3 = df2.pivot(index="Chemical_Formula", columns="Property_name", values="Property_Scalar")
После выполнения этого кода, вы получите данные в формате, где каждая химическая формула будет иметь свои соответствующие значения свойств в одной строке.
-
Обработка и анализ данных:
На данном этапе вы сможете удалить ненужные столбцы или строки, заполнить пустые значения, если это необходимо, и подготовить данные для дальнейшего анализа. -
Построение графиков:
После структурирования данных можно использовать библиотеки, такие как Matplotlib или Seaborn, для построения графиков по проводу или другим свойствам, изменяющимся в зависимости от температуры, если эта информация доступна в вашем наборе данных.
Заключение
Данный подход позволит вам привести данные к более упорядоченному виду, что существенно облегчит их визуализацию и анализ. Это также даст возможность создавать подробные и наглядные графики, решая вашу задачу построения гистограмм.
Использование методологии Pandas для работы с массивами данных в Python помогает оптимизировать выполнение подобных задач и позволяет автоматизировать их до значительной степени с минимальными затратами времени.